Ensure NonisolatedNonsendingByDefault doesn't break exit tests.#1383
Merged
Conversation
When `NonisolatedNonsendingByDefault` is enabled, overload resolution of `ExitTest.__store()` picks the overload that takes any old `T` instead of taking a function. This overload exists only to suppress certain unhelpful compiler diagnostics and its implementation immediately aborts, which causes the described failure. Adding `nonisolated(nonsending)` or `@concurrent` to the "good" overload doesn't appear to satisfy the type checker, so mark the "bad" overload as explicitly disfavoured instead. Resolves #1375.
jerryjrchen
approved these changes
Oct 27, 2025
jerryjrchen
left a comment
Contributor
There was a problem hiding this comment.
The workaround makes sense to me. Is there a compiler bug related to this feature that's worth investigating further? Meaning the disfavored overload here is just a short term fix?
Contributor
Author
|
I suspect there's an underlying bug in how textual Swift interfaces are used at compile time, but at this point I don't have a repro case I can hand off to the compiler team. |
grynspan
added a commit
that referenced
this pull request
Nov 12, 2025
…sts. (#1407) - **Explanation**: Adjust the (non-ABI-affecting) signature of an underlying function used by the expansion of the `#expect(processExitsWith:)` macro so that when Approachable Concurrency is enabled, we pick the correct overload of said function. - **Scope**: Exit tests with Approachable Concurrency enabled. - **Issues**: #1375 - **Original PRs**: #1383 - **Risk**: Low - **Testing**: Existing CI jobs and manual verification. It is not possible at this time to write a unit test for this fix due to swiftlang/swift-package-manager#9293. - **Reviewers**: @stmontgomery @briancroom @jerryjrchen
stmontgomery
added a commit
to stmontgomery/swift-testing
that referenced
this pull request
Nov 13, 2025
- **Explanation**: Adjust the (non-ABI-affecting) signature of an underlying function used by the expansion of the `#expect(processExitsWith:)` macro so that when Approachable Concurrency is enabled, we pick the correct overload of said function. - **Scope**: Exit tests with Approachable Concurrency enabled. - **Issues**: swiftlang#1375 - **Original PRs**: swiftlang#1383 - **Risk**: Low - **Testing**: Existing CI jobs and manual verification. It is not possible at this time to write a unit test for this fix due to swiftlang/swift-package-manager#9293. - **Reviewers**: @grynspan @briancroom @jerryjrchen
stmontgomery
added a commit
that referenced
this pull request
Nov 13, 2025
#1421) - **Explanation**: Adjust the (non-ABI-affecting) signature of an underlying function used by the expansion of the `#expect(processExitsWith:)` macro so that when Approachable Concurrency is enabled, we pick the correct overload of said function. - **Scope**: Exit tests with Approachable Concurrency enabled. - **Issues**: #1375 - **Original PRs**: #1383, #1407 - **Risk**: Low - **Testing**: Existing CI jobs and manual verification. It is not possible at this time to write a unit test for this fix due to swiftlang/swift-package-manager#9293. - **Reviewers**: @grynspan @briancroom @jerryjrchen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
When
NonisolatedNonsendingByDefaultis enabled, overload resolution ofExitTest.__store()picks the overload that takes any oldTinstead of taking a function. This overload exists only to suppress certain unhelpful compiler diagnostics and its implementation immediately aborts, which causes the described failure.Adding
nonisolated(nonsending)or@concurrentto the "good" overload doesn't appear to satisfy the type checker, so mark the "bad" overload as explicitly disfavoured instead.I am unable to add a unit test for this case due to swiftlang/swift-package-manager#9293.
Resolves #1375.
Checklist: