Add StrictSendableMetatypes to require Sendable requirements on metatypes #79352
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.
Introduce a new experimental feature StrictSendableMetatypes that stops treating all metatypes as
Sendable
. Instead, metatypes of generic parameters and existentials are only considered Sendable if their corresponding instance types are guaranteed to be Sendable.Enforce this property within region isolation. Track metatype creation instructions and put them in the task's isolation domain, so that transferring them into another isolation domain produces a diagnostic. As an example:
At the type checker level, handle direct attempts to capture metatypes by tracking generic type captures within closures, so that we can diagnose, e.g.,
Model the sendability of a type's metatype with the new marker protocol
SendableMetatype
, whichSendable
now inherits from and which is used to determine when a metatype is Sendable. Specifically,T: SendableMetatype
impliesT.Type: Sendable
, on which this analysis is based. Thank you to @slavapestov for the insight into this approach!