1*0998637eSRiver Riddle //===- PassPipelineParserTest.cpp - Pass Parser unit tests ----------------===// 2*0998637eSRiver Riddle // 3*0998637eSRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0998637eSRiver Riddle // See https://llvm.org/LICENSE.txt for license information. 5*0998637eSRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0998637eSRiver Riddle // 7*0998637eSRiver Riddle //===----------------------------------------------------------------------===// 8*0998637eSRiver Riddle 9*0998637eSRiver Riddle #include "mlir/IR/Builders.h" 10*0998637eSRiver Riddle #include "mlir/IR/BuiltinOps.h" 11*0998637eSRiver Riddle #include "mlir/Pass/Pass.h" 12*0998637eSRiver Riddle #include "mlir/Pass/PassManager.h" 13*0998637eSRiver Riddle #include "mlir/Pass/PassRegistry.h" 14*0998637eSRiver Riddle #include "llvm/Support/raw_ostream.h" 15*0998637eSRiver Riddle #include "gtest/gtest.h" 16*0998637eSRiver Riddle 17*0998637eSRiver Riddle #include <memory> 18*0998637eSRiver Riddle 19*0998637eSRiver Riddle using namespace mlir; 20*0998637eSRiver Riddle using namespace mlir::detail; 21*0998637eSRiver Riddle 22*0998637eSRiver Riddle namespace { TEST(PassPipelineParserTest,InvalidOpAnchor)23*0998637eSRiver RiddleTEST(PassPipelineParserTest, InvalidOpAnchor) { 24*0998637eSRiver Riddle // Helper functor used to parse a pipeline and check that it results in the 25*0998637eSRiver Riddle // provided error message. 26*0998637eSRiver Riddle auto checkParseFailure = [](StringRef pipeline, StringRef expectedErrorMsg) { 27*0998637eSRiver Riddle std::string errorMsg; 28*0998637eSRiver Riddle { 29*0998637eSRiver Riddle llvm::raw_string_ostream os(errorMsg); 30*0998637eSRiver Riddle FailureOr<OpPassManager> result = parsePassPipeline(pipeline, os); 31*0998637eSRiver Riddle EXPECT_TRUE(failed(result)); 32*0998637eSRiver Riddle } 33*0998637eSRiver Riddle EXPECT_TRUE(StringRef(errorMsg).contains(expectedErrorMsg)); 34*0998637eSRiver Riddle }; 35*0998637eSRiver Riddle 36*0998637eSRiver Riddle // Handle parse errors when the anchor is incorrectly structured. 37*0998637eSRiver Riddle StringRef anchorErrorMsg = 38*0998637eSRiver Riddle "expected pass pipeline to be wrapped with the anchor operation type"; 39*0998637eSRiver Riddle checkParseFailure("module", anchorErrorMsg); 40*0998637eSRiver Riddle checkParseFailure("()", anchorErrorMsg); 41*0998637eSRiver Riddle checkParseFailure("module(", anchorErrorMsg); 42*0998637eSRiver Riddle checkParseFailure("module)", anchorErrorMsg); 43*0998637eSRiver Riddle } 44*0998637eSRiver Riddle 45*0998637eSRiver Riddle } // namespace 46