Skip to content

LifetimeDependence: redesign dependence scope handling #78228

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Dec 17, 2024

Conversation

atrick
Copy link
Contributor

@atrick atrick commented Dec 17, 2024

Handle arbitrarily nested accesses, borrows, and coroutines.

Handle dependence on variable bindings that hold trivial values.

This overhaul is currently blocking a SILGen fix that adds mark_dependence to unsafeAddress, so that addressors can be used to implement borrowed properties. More tests will be added for addressors at that time.

Fixes rdar://140424699 (Invalid SIL is generated by some passes for certain @ lifetime annotations)

Skip borrow scopes that do not actually require lifetime dependence. This
will improve LifetimeDependenceScopeFixup.
We can assume that memory is already initialized at the point of a 'yield'; a
yield use does not need to invalidate the single-initialization property for
temporary stack allocations.
Generalize the design. Extend it to handle different kinds of coroutine
dependencies: address/value, scoped/inherited.
Handle all combinations of nested dependence scopes: access scopes, coroutines,
and borrow scopes.

This is required to enforce ~Escapable _read accessors and unsafeAddress addressors.

Fixes rdar://140424699 (Invalid SIL is generated by some passes for certain
@Lifetime annotations)
A feature flag is needed so that newer compilers can build older standard
library interfaces.
To allow enforcement of trivial borrows.
@atrick
Copy link
Contributor Author

atrick commented Dec 17, 2024

@swift-ci test

@atrick atrick enabled auto-merge December 17, 2024 06:07
@atrick atrick merged commit 643cbd1 into swiftlang:main Dec 17, 2024
4 of 5 checks passed
@atrick atrick deleted the lifedep-scopes-trivial branch December 17, 2024 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant