[6.0][Concurrency] Diagnose captures of self
in a task created in deinit
.
#75227
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.
self
outlivingdeinit
causes a fatal error at runtime. This is a common mistake to make when creating isolated tasks inside nonisolated deinits to workaround the lack of synchronous isolated deinits in Swift 6. This change adds a new compiler error, staged in as a warning in language modes prior to Swift 6 mode, when you captureself
in an@escaping
closure that's alsosending
or@Sendable
, which covers both the task creation APIs as well asDispatchQueue.async
when used directly inside adeinit
.self
in an@escaping
closure that is alsosending
or@Sendable
inside adeinit
.self
in a task created indeinit
. #75224.warnUntilSwiftVersion(6)