diff --git a/mlir/lib/Dialect/SCF/IR/SCF.cpp b/mlir/lib/Dialect/SCF/IR/SCF.cpp --- a/mlir/lib/Dialect/SCF/IR/SCF.cpp +++ b/mlir/lib/Dialect/SCF/IR/SCF.cpp @@ -1475,9 +1475,14 @@ if (regions.empty()) return failure(); Region *r = regions.front(); - assert(!r->empty()); + if (r->empty()) + return failure(); Block &b = r->front(); - auto yieldOp = llvm::dyn_cast(b.getTerminator()); + if (b.empty()) + return failure(); + auto yieldOp = llvm::dyn_cast(b.back()); + if (!yieldOp) + return failure(); TypeRange types = yieldOp.getOperandTypes(); inferredReturnTypes.insert(inferredReturnTypes.end(), types.begin(), types.end());