diff --git a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp --- a/mlir/lib/Dialect/Transform/IR/TransformOps.cpp +++ b/mlir/lib/Dialect/Transform/IR/TransformOps.cpp @@ -828,7 +828,9 @@ transform::TransformState &state) { SmallVector> resultOps(getNumResults(), {}); - for (Operation *op : state.getPayloadOps(getTarget())) { + // Copy pointers to guard against invalidation by the transform. + SmallVector payloadOps{state.getPayloadOps(getTarget())}; + for (Operation *op : payloadOps) { auto scope = state.make_region_scope(getBody()); if (failed(state.mapBlockArguments(getIterationVariable(), {op}))) return DiagnosedSilenceableFailure::definiteFailure();