Skip to content

Commit 2a7b55c

Browse files
committed
Tests: Add a SILGen test for async functions with the @_backDeploy attribute.
1 parent 31b1820 commit 2a7b55c

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// RUN: %target-swift-emit-sil -parse-as-library -module-name back_deploy %s -target %target-cpu-apple-macosx10.50 -verify
2+
// RUN: %target-swift-emit-silgen -parse-as-library -module-name back_deploy %s | %FileCheck %s
3+
// RUN: %target-swift-emit-silgen -parse-as-library -module-name back_deploy %s -target %target-cpu-apple-macosx10.50 | %FileCheck %s
4+
// RUN: %target-swift-emit-silgen -parse-as-library -module-name back_deploy %s -target %target-cpu-apple-macosx10.60 | %FileCheck %s
5+
6+
// REQUIRES: OS=macosx
7+
// REQUIRES: concurrency
8+
9+
@available(macOS 10.51, *)
10+
@usableFromInline func otherFunc() async {}
11+
12+
// -- Fallback definition of asyncFunc()
13+
// CHECK: sil non_abi [serialized] [ossa] @$s11back_deploy9asyncFuncyyYaFTwB : $@convention(thin) @async () -> ()
14+
// CHECK: bb0:
15+
// CHECK: [[FNREF:%.*]] = function_ref @$s11back_deploy9otherFuncyyYaF : $@convention(thin) @async () -> ()
16+
// CHECK: [[APPLY:%.*]] = apply [[FNREF]]() : $@convention(thin) @async () -> ()
17+
// CHECK: [[RESULT:%.*]] = tuple ()
18+
// CHECK: return [[RESULT]] : $()
19+
20+
// -- Back deployment thunk for trivialFunc()
21+
// CHECK-LABEL: sil non_abi [serialized] [thunk] [ossa] @$s11back_deploy9asyncFuncyyYaFTwb : $@convention(thin) @async () -> ()
22+
// CHECK: bb0:
23+
// CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 10
24+
// CHECK: [[MINOR:%.*]] = integer_literal $Builtin.Word, 52
25+
// CHECK: [[PATCH:%.*]] = integer_literal $Builtin.Word, 0
26+
// CHECK: [[OSVFN:%.*]] = function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF : $@convention(thin) (Builtin.Word, Builtin.Word, Builtin.Word) -> Builtin.Int1
27+
// CHECK: [[AVAIL:%.*]] = apply [[OSVFN]]([[MAJOR]], [[MINOR]], [[PATCH]]) : $@convention(thin) (Builtin.Word, Builtin.Word, Builtin.Word) -> Builtin.Int1
28+
// CHECK: cond_br [[AVAIL]], [[AVAIL_BB:bb[0-9]+]], [[UNAVAIL_BB:bb[0-9]+]]
29+
//
30+
// CHECK: [[UNAVAIL_BB]]:
31+
// CHECK: [[FALLBACKFN:%.*]] = function_ref @$s11back_deploy9asyncFuncyyYaFTwB : $@convention(thin) @async () -> ()
32+
// CHECK: {{%.*}} = apply [[FALLBACKFN]]() : $@convention(thin) @async () -> ()
33+
// CHECK: br [[RETURN_BB:bb[0-9]+]]
34+
//
35+
// CHECK: [[AVAIL_BB]]:
36+
// CHECK: [[ORIGFN:%.*]] = function_ref @$s11back_deploy9asyncFuncyyYaF : $@convention(thin) @async () -> ()
37+
// CHECK: {{%.*}} = apply [[ORIGFN]]() : $@convention(thin) @async () -> ()
38+
// CHECK: br [[RETURN_BB]]
39+
//
40+
// CHECK: [[RETURN_BB]]
41+
// CHECK: [[RESULT:%.*]] = tuple ()
42+
// CHECK: return [[RESULT]] : $()
43+
44+
// -- Original definition of trivialFunc()
45+
// CHECK-LABEL: sil [available 10.52] [ossa] @$s11back_deploy9asyncFuncyyYaF : $@convention(thin) @async () -> ()
46+
@available(macOS 10.51, *)
47+
@_backDeploy(before: macOS 10.52)
48+
public func asyncFunc() async {
49+
await otherFunc()
50+
}
51+
52+
// CHECK-LABEL: sil hidden [available 10.51] [ossa] @$s11back_deploy6calleryyYaF : $@convention(thin) @async () -> ()
53+
@available(macOS 10.51, *)
54+
func caller() async {
55+
// -- Verify the thunk is called
56+
// CHECK: {{%.*}} = function_ref @$s11back_deploy9asyncFuncyyYaFTwb : $@convention(thin) @async () -> ()
57+
await asyncFunc()
58+
}
59+

0 commit comments

Comments
 (0)