[5.9🍒] _forget
usage fixes to match SE-390
#65743
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.
• Description: A bundle of changes to usages of the
_forget
statement to match SE-390. See the commits for details but the TLDR is: (1) emit an error if_forget
is in an initializer, as it was being permitted there in addition to consuming methods; (2) emit an error if_forget
is used in a type with no deinit, since there's no reason to use_forget
at all; (3) require only "trivially destructed" storage in a type with a_forget
, since we don't yet have the semantics we want implemented if you have storage that requires destruction.• Risk: Low-ish. Could lead to source breaks that are trivial to fix for (1) and (2); just define a
consuming func forget() { _forget self }
if you used it in an initializer. For (3) it's a harder but necessary source break that is better to make now than later. It shouldn't affect early adopters that I'm aware of.• Original PR: #65690
• Reviewed By: @airspeedswift
• Testing: regression tests included
• Resolves: rdar://108877261