[sema] Honor explicit global actor isolation for async closures in constraint solver #87062
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.
NOTE: This is a draft since I am just testing this out with the source compat suite. I will add more tests/etc if it looks good.
Fixes rdar://169803154
Previously, we were emitting an unknown pattern error in code like:
The issue was that the closure was considered non-Sendable despite being @mainactor due to the
try awaitin it. Investigation revealed an inconsistency between the constraint solver and getClosureIsolation:In the constraint solver, we were only honoring explicit global actor isolation for non-async functions, which caused us to not infer that the closure should have been Sendable despite the try await.
Later getClosureIsolation did the correct thing and we labeled the closure as having global actor isolation, but that did not impact the actual type of the closure being Sendable at the SIL level.
The result was a non-Sendable main actor isolated closure.
This commit removes the restriction that prevented honoring explicit global actor isolation for async closures, making the constraint solver consistent with getClosureIsolation.