Skip to content

[ConstraintSystem] Implement sendability inference for key path expressions #70076

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 11 commits into from
Nov 30, 2023

Conversation

xedin
Copy link
Contributor

@xedin xedin commented Nov 28, 2023

Gated by InferSendableFromCaptures experimental flag.

Swift forums pitch - https://forums.swift.org/t/pitch-inferring-sendable-for-methods-and-key-path-literals/68011

Sendability of key path expressions is expressed by means of protocol composition
between key path type and Sendable protocol i.e. KeyPath<String, Int> & Sendable.

Augment the key path capability inference to include sendability checking based
on whether subscript component arguments captured by a key path are sendable
or not or, if there are subscript components a key path expression is always sendable.

Resolves: rdar://75861003

Since the type of the instruction could be existential it's
better to keep retrival logic in one place.
…d to a key path type

This is currently limited to `InferSendableFromCaptures` feature
but a valid thing to do in general because otherwise it won't be
possible to determine the sendability of the key path type.
…ial type

A way to mark key path as Sendable is to extend its type with `& Sendable`.
This is something that makes the type of a key path expression an existential
with superclass bound expressed as a known key path type.
…lity of key path expressions

When `InferSendableFromCaptures` feature is enabled `inferKeyPathLiteralCapability`
should examine subscript arguments to determine whether the key path type is
sendable or not, and if so, inform inference to produce `& Sendable` existential
type as a binding. Binding key path type is delayed until all subscript arguments
are fully resolved.
@xedin xedin added the swift evolution pending discussion Flag → feature: A feature that has a Swift evolution proposal currently in review label Nov 28, 2023
@xedin xedin force-pushed the sendable-keypath-literals branch from b3c70ef to 3d6ddd5 Compare November 28, 2023 21:48
@xedin
Copy link
Contributor Author

xedin commented Nov 28, 2023

@swift-ci please test

@xedin
Copy link
Contributor Author

xedin commented Nov 28, 2023

@swift-ci please test source compatibility

@xedin
Copy link
Contributor Author

xedin commented Nov 28, 2023

@swift-ci please test Linux platform

@ahoppen ahoppen removed their request for review November 28, 2023 22:47
@xedin
Copy link
Contributor Author

xedin commented Nov 29, 2023

@swift-ci please test

@xedin
Copy link
Contributor Author

xedin commented Nov 30, 2023

@swift-ci please test Linux platform

@xedin xedin merged commit 4db2cf7 into swiftlang:main Nov 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
swift evolution pending discussion Flag → feature: A feature that has a Swift evolution proposal currently in review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant