diff --git a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp index f1d07b85adb757..dc004cd14dc0fb 100644 --- a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp +++ b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp @@ -2188,6 +2188,9 @@ LogicalResult transform::SequenceOp::verify() { } } + if (!getBodyBlock()->hasTerminator()) + return emitOpError() << "expects to have a terminator in the body"; + if (getBodyBlock()->getTerminator()->getOperandTypes() != getOperation()->getResultTypes()) { InFlightDiagnostic diag = emitOpError() diff --git a/mlir/test/Dialect/Transform/ops-invalid.mlir b/mlir/test/Dialect/Transform/ops-invalid.mlir index 3e30947769eb40..09641615887981 100644 --- a/mlir/test/Dialect/Transform/ops-invalid.mlir +++ b/mlir/test/Dialect/Transform/ops-invalid.mlir @@ -22,6 +22,16 @@ transform.sequence failures(propagate) { } } +// ----- + +// expected-error @below {{expects to have a terminator in the body}} +"transform.sequence"() <{failure_propagation_mode = 1 : i32, operandSegmentSizes = array}> ({ +^bb0(%arg0: !transform.any_op): + transform.apply_patterns to %arg0 { + } : !transform.any_op +}) : () -> () + + // ----- // expected-error @below {{'transform.sequence' op expects trailing entry block arguments to be of type implementing TransformHandleTypeInterface, TransformValueHandleTypeInterface or TransformParamTypeInterface}}