Use the `%target-swift-5.1-abi-triple` substitution to compile the tests for
deployment to the minimum OS versions required for use of _Concurrency APIs,
instead of disabling availability checking.
Since https://reviews.llvm.org/D158638, entry values are only produced for
64-bit architectures. As such, related tests need to be guarded by the
appropriate REQUIRES directive.
This commit is similar to cbb89c78d, but for explosions. emitShadowCopyIfNeeded()
has some extra code that was added when function arguments were moved out of the
async context to ensure that they are being lifetime-extended, and there is also
code that generates an incorrect load from the shadow copy. However,
emitShadowCopyIfNeeded is supposed return either an alloca or the value, and
IRGenDebugInfo knows to describe the value in the alloca already. The load is
counterproductive it's only valid until whatever register it ends up in is
clobbered, whereas the alloca is valid throughout the function.
This patch removes the load and updates the tests accordingly.
rdar://81565869
(cherry picked from commit b7e2b2a6e7)
Repurpose mangling operator `Y` as an umbrella operator that covers new attributes on function types. Free up operators `J`, `j`, and `k`.
```
async ::= 'Ya' // 'async' annotation on function types
sendable ::= 'Yb' // @Sendable on function types
throws ::= 'K' // 'throws' annotation on function types
differentiable ::= 'Yjf' // @differentiable(_forward) on function type
differentiable ::= 'Yjr' // @differentiable(reverse) on function type
differentiable ::= 'Yjd' // @differentiable on function type
differentiable ::= 'Yjl' // @differentiable(_linear) on function type
```
Resolves rdar://76299796.
Most of the async runtime functions have been changed to not
expect the task and executor to be passed in. When knowing the
task and executor is necessary, there are runtime functions
available to recover them.
The biggest change I had to make to a runtime function signature
was to swift_task_switch, which has been altered to expect to be
passed the context and resumption function instead of requiring
the caller to park the task. This has the pleasant consequence
of allowing the implementation to very quickly turn around when
it recognizes that the current executor is satisfactory. It does
mean that on arm64e we have to sign the continuation function
pointer as an argument and then potentially resign it when
assigning into the task's resume slot.
rdar://70546948