swift
787cca9e - Rewrite the type of `nonisolated(nonsending)` closures.

Commit
69 days ago
Rewrite the type of `nonisolated(nonsending)` closures. The constraint solver does not reliably give closures a function type that includes `nonisolated(noncaller)`, even when the immediate context requires a conversion to such a type. We were trying to work around this in SILGen, but the peephole only kicked in if the types matched exactly, so a contextual conversion that e.g. added `throws` was still emitting the closure as `@concurrent`, which is of course the wrong semantics. It's relatively easy to avoid all this by just rewriting the closure's type to include `nonisolated(nonsending)` at a point where we can reliably decide that, and then SILGen doesn't have to peephole anything for correctness. Fixes rdar://155313349
Author
Committer
Parents
Loading