Fix index variable leak when forall body is empty #25915
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #25893, reverts #25894.
I was happy to find logic that notes down loop index variables as something that needs to be auto-destroyed in a scope. However, while stepping through in the debugger, I noticed that the cleanup only happens "per statement", which means that loops with empty bodies over iterators do not have their bounds cleaned up:
One of the reasons was that an "anchor statement" was needed to know where to put all the auto-destroys. This PR fixes the problem by detecting the situation (empty block statement but need to clean up variables), inserting a dummy
noop
, and using that as anchor.Reviewed by @jabraham17 -- thanks!
Testing