Skip to content

Commit 6c8513f

Browse files
committed
[ConstraintSystem] Test @autoclosure behavior in Swift < 5 compatibility mode
Swift versions < 5 allowed argument passed to @autoclosure parameter to be @autoclosure function type, we need to make sure that such behavior is preserved.
1 parent ed84f18 commit 6c8513f

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// RUN: %target-swift-frontend -emit-sil -verify %s | %FileCheck %s
2+
// REQUIRES: SWIFT_VERSION=4
3+
4+
do {
5+
func a(_ x: @autoclosure () -> Int) {}
6+
func b(_ x: Int, _ f: @autoclosure () -> Int = #line) {}
7+
8+
func c(_ y: @autoclosure () -> Int, _ z: Int) {
9+
// CHECK: function_ref @$s16attr_autoclosure1aL_yySiyXKF
10+
a(y)
11+
12+
// CHECK: function_ref @$s16attr_autoclosure1cL_yySiyXK_SitFSiyXEfu_
13+
b(z + 42) // ok
14+
b(z, y) // ok to pass `@autoclosure` function type as an argument
15+
b(z, y()) // ok
16+
}
17+
}
18+
19+
func foo(_ f: @autoclosure () -> Int) {}
20+
func foo(_ f: () -> Int) {}
21+
22+
do {
23+
func bar(_ a: @autoclosure () -> Int,
24+
_ b: () -> Int,
25+
_ c: Int) {
26+
// CHECK: function_ref @$s16attr_autoclosure3fooyySiyXEF
27+
foo(a)
28+
// CHECK: function_ref @$s16attr_autoclosure3fooyySiyXEF
29+
foo(b)
30+
31+
// CHECK: function_ref @$s16attr_autoclosure3fooyySiyXKF
32+
foo(a())
33+
// CHECK: function_ref @$s16attr_autoclosure3fooyySiyXKF
34+
foo(b())
35+
36+
// CHECK: function_ref @$s16attr_autoclosure3fooyySiyXKF
37+
foo(c)
38+
}
39+
}

0 commit comments

Comments
 (0)