6.0: [MoveOnlyAddressChecker] Fix representation for consumed fields. #72497
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 class of overconsumes by teaching the move-only address checker that an instruction can consume multiple fields.
An instruction can consume multiple fields of an aggregate which is being checked. For example,
apply %fn(%field1, %field3)
. Where%field1
and%field3
are noncontiguous fields of some struct.Previously, for a single instruction, the checker only tracked a single contiguous range of bits which the instruction consumed. It couldn't represent instructions such as this apply. Consequently, it failed to recognize that fields of the aggregate beyond the first it examined were consumed by the instruction. The result was an overconsume of each field beyond the first.
Here, this is fixed by associating a vector of bits with each instruction.
Scope: Affects move-only checking.
Issue: rdar://125103951
Original PR: #72463
Risk: Low.
Testing: Added test case that was previously miscompiled.
Reviewer: Joe Groff ( @jckarter )