[ShrinkBorrowScope] Don't hoist over any applies. #40764
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.
Previously, hoisting was done over applies that were users of the borrowed value. Here, that is no longer done.
That hoisting was done on the theory that multiple distinct lexical scopes were equivalent to a single enclosing lexical scope. Dead borrow elimination, however, means that they are not in fact the same: If a callee takes an object as an argument, and in that callee that argument is dead, FSO and inliniing (even with approaches to maintain lexical borrow scopes when the value that is borrowed comes from an owned argument) can result in a dead borrow scope in the caller which could then be eliminated which would then enable the destroy_value to be hoisted over the inlined body, including over barriers.