From 249d53f1d4d89f991946b2f6ee6574480fba66c7 Mon Sep 17 00:00:00 2001 From: Alex Zinenko Date: Tue, 19 Sep 2023 09:44:08 +0000 Subject: [PATCH] [mlir] avoid crash in transform.sequence verifier The verifier was unconditionally accessing the body block terminator, but it's not guaranteed that the block has one in general. --- mlir/lib/Dialect/Transform/IR/TransformOps.cpp | 3 +++ mlir/test/Dialect/Transform/ops-invalid.mlir | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp index f1d07b85adb75..dc004cd14dc0f 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 3e30947769eb4..0964161588798 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}}