mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Type annotations for instruction operands are omitted, e.g. ``` %3 = struct $S(%1, %2) ``` Operand types are redundant anyway and were only used for sanity checking in the SIL parser. But: operand types _are_ printed if the definition of the operand value was not printed yet. This happens: * if the block with the definition appears after the block where the operand's instruction is located * if a block or instruction is printed in isolation, e.g. in a debugger The old behavior can be restored with `-Xllvm -sil-print-types`. This option is added to many existing test files which check for operand types in their check-lines.
37 lines
2.7 KiB
Swift
37 lines
2.7 KiB
Swift
// RUN: %target-swift-frontend -Xllvm -sil-print-types -emit-silgen %s -enable-experimental-concurrency -target %target-swift-5.1-abi-triple | %FileCheck %s
|
|
// REQUIRES: concurrency
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s7reasync0A8FunctionyyyyYaXEYaF : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> ()) -> () {
|
|
func reasyncFunction(_ a: () async -> ()) reasync {
|
|
await a()
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s7reasync10syncCalleryyyyXEF : $@convention(thin) (@guaranteed @noescape @callee_guaranteed () -> ()) -> () {
|
|
// CHECK: [[ARGC:%.*]] = copy_value %0
|
|
// CHECK: [[THUNK_FN:%.*]] = function_ref @$sIg_IegH_TR : $@convention(thin) @async (@guaranteed @noescape @callee_guaranteed () -> ()) -> ()
|
|
// CHECK: [[THUNK:%.*]] = partial_apply [callee_guaranteed] [[THUNK_FN]]([[ARGC]]) : $@convention(thin) @async (@guaranteed @noescape @callee_guaranteed () -> ()) -> ()
|
|
// CHECK: [[NOESCAPE:%.*]] = convert_escape_to_noescape [not_guaranteed] [[THUNK]] : $@async @callee_guaranteed () -> () to $@noescape @async @callee_guaranteed () -> ()
|
|
// CHECK: [[FN:%.*]] = function_ref @$s7reasync0A8FunctionyyyyYaXEYaF : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> ()) -> ()
|
|
// CHECK: apply [noasync] [[FN]]([[NOESCAPE]]) : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> ()) -> ()
|
|
func syncCaller(_ fn: () -> ()) {
|
|
reasyncFunction(fn)
|
|
}
|
|
|
|
func asyncCaller(_ fn: () async -> ()) async {
|
|
// CHECK: [[FN:%.*]] = function_ref @$s7reasync0A8FunctionyyyyYaXEYaF : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> ()) -> ()
|
|
// CHECK: apply [[FN]](%0) : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> ()) -> ()
|
|
await reasyncFunction(fn)
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s7reasync23throwingReasyncFunctionyyyyYaKXEYaKF : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> @error any Error) -> @error any Error {
|
|
func throwingReasyncFunction(_ a: () async throws -> ()) reasync throws {
|
|
try await a()
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s7reasync18throwingSyncCalleryyyyXEKF : $@convention(thin) (@guaranteed @noescape @callee_guaranteed () -> ()) -> @error any Error {
|
|
// CHECK: [[FN:%.*]] = function_ref @$s7reasync23throwingReasyncFunctionyyyyYaKXEYaKF : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> @error any Error) -> @error any Error
|
|
// CHECK: try_apply [noasync] [[FN]]({{.*}}) : $@convention(thin) @async (@guaranteed @noescape @async @callee_guaranteed () -> @error any Error) -> @error any Error, normal bb1, error bb2
|
|
func throwingSyncCaller(_ fn: () -> ()) throws {
|
|
try throwingReasyncFunction(fn)
|
|
}
|