6.1: [OSSACanonicalizeGuaranteed] Don't rewrite consuming uses of move-only values. #78574
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.
Explanation: Fix a miscompile which introduced a copy of a noncopyable value.
SILCombine uses the
CanonicalizeBorrowScope
utility to eliminate copies of guaranteed function arguments. The utility walks the def-use tree of the argument, walking through copies and moves, walking into the uses of forwarding operations, producing copies as needed for any consuming uses for the value produced by a chain of forwarding operations. These days, some forwarding operations produce noncopyable values such asstruct $Noncopyable
, however. If the tree included a chain likeconsume(struct $Noncopyable(copy(%arg)))
, it was previously rewritten asconsume(copy(struct $Noncopyable(%arg)))
. This is invalid (copies of noncopyable values are invalid). Here, this is fixed by bailing out of rewriting uses of a particular def in the tree (e.g.struct $Noncopyable(copy(%arg))
) if one of the uses is a consuming use of a noncopyable value. This bailout (two lines) required a bit of tweaking to the utility because it was written not to bailout when processing arguments--at the time, there were no cases in which it ought to.Scope: Affects optimized code.
Issue: rdar://142520491
Original PR: #78552
Risk: Low.
Testing: Added tests.
Reviewer: Meghana Gupta ( @meg-gupta )