diff --git a/mlir/lib/Dialect/Transform/Transforms/TransformInterpreterUtils.cpp b/mlir/lib/Dialect/Transform/Transforms/TransformInterpreterUtils.cpp index 3fa26bce15099..2f74b76f07b77 100644 --- a/mlir/lib/Dialect/Transform/Transforms/TransformInterpreterUtils.cpp +++ b/mlir/lib/Dialect/Transform/Transforms/TransformInterpreterUtils.cpp @@ -109,6 +109,12 @@ LogicalResult transform::detail::parseTransformModuleFromFile( sourceMgr.AddNewSourceBuffer(std::move(memoryBuffer), llvm::SMLoc()); transformModule = OwningOpRef(parseSourceFile(sourceMgr, context)); + if (!transformModule) { + // Failed to parse the transform module. + // Don't need to emit an error here as the parsing should have already done + // that. + return failure(); + } return mlir::verify(*transformModule); } diff --git a/mlir/test/Dialect/Transform/include/test-interpreter-library-invalid/definitions-invalid.mlir b/mlir/test/Dialect/Transform/include/test-interpreter-library-invalid/definitions-invalid.mlir new file mode 100644 index 0000000000000..08e53a8d553c3 --- /dev/null +++ b/mlir/test/Dialect/Transform/include/test-interpreter-library-invalid/definitions-invalid.mlir @@ -0,0 +1,11 @@ +// RUN: mlir-opt %s --verify-diagnostics + +// The only thing we check here is that it should fail to parse. The other +// check is in the preload test. + +module attributes {transform.with_named_sequence} { + transform.named_sequence private @private_helper(%arg0: !transform.any_op {transform.readonly}) { + // expected-error @below {{expected ','}} + transform.test_print_remark_at_operand %arg0 "should have ',' prior to this" : !transform.any_op + } +} diff --git a/mlir/test/Dialect/Transform/preload-library-invalid.mlir b/mlir/test/Dialect/Transform/preload-library-invalid.mlir new file mode 100644 index 0000000000000..9abb849e4d27e --- /dev/null +++ b/mlir/test/Dialect/Transform/preload-library-invalid.mlir @@ -0,0 +1,7 @@ +// RUN: mlir-opt %s \ +// RUN: -transform-preload-library=transform-library-paths=%p%{fs-sep}include%{fs-sep}test-interpreter-library-invalid \ +// RUN: -transform-interpreter=entry-point=private_helper \ +// RUN: -verify-diagnostics + +// This test checks if the preload mechanism fails gracefully when passed an +// invalid transform file.