diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp --- a/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp +++ b/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp @@ -2276,13 +2276,15 @@ SmallVector returnedArgs; for (Value yieldVal : yieldOp.values()) { auto yieldArg = yieldVal.dyn_cast(); - if (!yieldArg) + if (!yieldArg || yieldArg.getOwner() != &body) return failure(); unsigned argumentNumber = yieldArg.getArgNumber(); if (argumentNumber < numIndexArgs) return failure(); returnedArgs.push_back(op->getOperand(argumentNumber - numIndexArgs)); } + if (returnedArgs.empty()) + return failure(); rewriter.replaceOp(genericOp, returnedArgs); return success(); }