[6.2] LifetimeDependenceScopeFixup: handle yielded value copies. #82050
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.
LifetimeDependenceScopeFixup: handle yielded value copies.
When extending an access scope over a coroutines, instead of simply
considering the lifetime of the coroutine scope, recurse through all
uses of yielded values. They may be copyable, non-Escapable values
that depend on the coroutine operand.
Fixes rdar://152693622 (Extend coroutines over copied yields)
(cherry picked from commit 227f802)
--- CCC ---
Explanation: When a coroutine yields a non-Escapable type, like Span, the container's access scope must be extended across all copies of that Span.
Scope: May fix miscompiles in Span-like property APIs imlemented using coroutines. None exist in the standard library today, so this appears limited to -enable-experimental-feature LifetimeDependence.
Radar/SR Issue: rdar://152693622 (Extend coroutines over copied yields)
main PR: #82049
Risk: Low
Testing: Added a unit test
Reviewer: Meghana Gupta