Skip to content

Commit 7a47808

Browse files
committed
Tests: Add a SILGen test for async functions with the @_backDeploy attribute.
1 parent dd015f4 commit 7a47808

File tree

1 file changed

+58
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)