diff --git a/mlir/lib/Translation/Translation.cpp b/mlir/lib/Translation/Translation.cpp --- a/mlir/lib/Translation/Translation.cpp +++ b/mlir/lib/Translation/Translation.cpp @@ -140,6 +140,11 @@ "o", llvm::cl::desc("Output filename"), llvm::cl::value_desc("filename"), llvm::cl::init("-")); + static llvm::cl::opt allowUnregisteredDialects( + "allow-unregistered-dialect", + llvm::cl::desc("Allow operation with no registered dialects"), + llvm::cl::init(false)); + static llvm::cl::opt splitInputFile( "split-input-file", llvm::cl::desc("Split the input file into pieces and " @@ -179,6 +184,7 @@ auto processBuffer = [&](std::unique_ptr ownedBuffer, raw_ostream &os) { MLIRContext context; + context.allowUnregisteredDialects(allowUnregisteredDialects); context.printOpOnDiagnostic(!verifyDiagnostics); llvm::SourceMgr sourceMgr; sourceMgr.AddNewSourceBuffer(std::move(ownedBuffer), SMLoc()); diff --git a/mlir/test/mlir-translate/unregistered-dialects.mlir b/mlir/test/mlir-translate/unregistered-dialects.mlir new file mode 100644 --- /dev/null +++ b/mlir/test/mlir-translate/unregistered-dialects.mlir @@ -0,0 +1,13 @@ +// RUN: not mlir-translate %s --allow-unregistered-dialect --mlir-to-llvmir -verify-diagnostics 2>&1 | FileCheck --check-prefix=UNREGOK %s +// RUN: not mlir-translate %s --mlir-to-llvmir -verify-diagnostics 2>&1 | FileCheck --check-prefix=REGONLY %s + + +// If the parser allows unregistered operations, then the translation fails, +// otherwise the parse fails. + +// UNREGOK: cannot be converted to LLVM IR +// REGONLY: operation being parsed with an unregistered dialect + +func @trivial() { + "simple.terminator"() : () -> () +}