================
@@ -542,3 +542,29 @@ void CIRGenFunction::popCleanupBlocks(
}
}
}
+
+/// Pops cleanup blocks until the given savepoint is reached, then add the
+/// cleanups from the given savepoint in the lifetime-extended cleanups stack.
+void CIRGenFunction::popCleanupBlocks(
+ EHScopeStack::stable_iterator oldCleanupStackDepth,
+ size_t oldLifetimeExtendedSize, ArrayRef<mlir::Value *> valuesToReload) {
+ popCleanupBlocks(oldCleanupStackDepth, valuesToReload);
+
+ // Move our deferred cleanups onto the EH stack.
+ for (size_t i = oldLifetimeExtendedSize,
+ e = lifetimeExtendedCleanupStack.size();
+ i != e;) {
----------------
erichkeane wrote:
I'm frightened by this 'loop' formulation in a few ways. The most of which is
the addition of 'sizeofs' but using != for the comparison here. It seems it
doesn't take much of a bug to turn this into an infinite loop.
Could we turn this to a `<` and an assert to make sure it equals? Or some other
sort of assert to make that work?
https://github.com/llvm/llvm-project/pull/189754
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits