[6.0] Alternative noncopyable switch design based on expression kind. #72954
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: Pre-review discussion of the noncopyable borrowing switch feature raised a preference for an alternative design where the ownership of a switch is driven by what the expression refers to: If an expression refers to noncopyable storage, then default to performing a borrowing switch, where
let
bindings in patterns borrow out of the matched value. If an expression refers to a temporary value or explicitly uses theconsume
keyword, then perform a consuming switch, wherelet
bindings take ownership of corresponding parts of the matched value. Allow_borrowing
to still be used to explicitly bind a pattern variable as a borrow, with no-implicit-copy semantics for copyable values.Scope: Changes behavior of a pre-release experimental feature.
Issue: rdar://126212597
Original PR: #72647
Risk: Low. This should have no effect on code using released features only. For early adopters of the feature, the necessary source changes are also minimal; one only needs to explicitly write
switch consume x
whenx
is a local variable binding that would otherwise be borrowed by default.Testing: Swift CI
Reviewer: @kavon