6.0: [MoveOnlyAddressChecker] Fix enum representation. #72508
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.
Explanation: Fix a class of compiler crashes by teaching the move-only address checker to represent the elements of an enum.
The checker and its supporting infrastructure (FieldSensitivePrunedLiveness) track the indecomposable fields of an aggregate individually, checking that each which is non-copyable is consumed exactly once. Among other things, it uses this infrastructure to determine whether a node of the aggregate may be consumed on its own (which is not allowed if the node appears within an intermediary aggregate with a deinit). (In the future, it might be allowed so long as that intermediary aggregate had been
discard
'd.)To allow this walk, it's necessary to identify which case of an enum is being consumed. (For example, one element but not another might have a payload with a deinit.)
Previously, the tracking for the indecomposable fields of an enum used the same bits to represent the different enum elements. That obstructed the walk up the tree from the consumed node.
Here, this is fixed by tracking the elements of an enum separately.
Scope: Affects move-only checking.
Issue: rdar://125113258
Original PR: #72469
Risk: Low.
Testing: Added test case that previously resulted in a crash.
Reviewer: Joe Groff ( @jckarter )