2
2
3
3
// Currently, this only appears for memberwise initializers.
4
4
5
+ // CHECK: default argument 0 of A.init(b:c:)
6
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1AV1b1cACSi_SbtcfcfA_ : $@convention(thin) () -> Int {
7
+ // CHECK-NEXT: bb0:
8
+ // CHECK-NEXT: function_ref variable initialization expression of A.b
9
+ // CHECK-NEXT: [[A_B_REF:%.*]] = function_ref @$s27stored_property_default_arg1AV1bSivpfi : $@convention(thin) () -> Int
10
+ // CHECK-NEXT: [[A_B:%.*]] = apply [[A_B_REF]]() : $@convention(thin) () -> Int
11
+ // CHECK-NEXT: return [[A_B]] : $Int
12
+ // CHECK-NEXT: }
13
+
14
+ // CHECK: default argument 1 of A.init(b:c:)
15
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1AV1b1cACSi_SbtcfcfA0_ : $@convention(thin) () -> Bool {
16
+ // CHECK-NEXT: bb0:
17
+ // CHECK-NEXT: function_ref variable initialization expression of A.c
18
+ // CHECK-NEXT: [[A_C_REF:%.*]] = function_ref @$s27stored_property_default_arg1AV1cSbvpfi : $@convention(thin) () -> Bool
19
+ // CHECK-NEXT: [[A_C:%.*]] = apply [[A_C_REF]]() : $@convention(thin) () -> Bool
20
+ // CHECK-NEXT: return [[A_C]] : $Bool
21
+ // CHECK-NEXT: }
22
+
5
23
struct A {
6
24
var b : Int = 0
7
25
var c : Bool = false
8
26
}
9
27
10
28
// CHECK-LABEL: sil hidden [ossa] @$s27stored_property_default_arg17checkConcreteTypeyyF : $@convention(thin) () -> () {
11
29
func checkConcreteType( ) {
12
- // CHECK: function_ref variable initialization expression of A.c
13
- // CHECK-NEXT: [[C1_REF:%.*]] = function_ref @$s27stored_property_default_arg1AV1cSbvpfi : $@convention(thin) () -> Bool
30
+ // CHECK: function_ref default argument 1 of A.init(b:c:)
31
+ // CHECK-NEXT: [[C1_REF:%.*]] = function_ref @$s27stored_property_default_arg1AV1b1cACSi_SbtcfcfA0_ : $@convention(thin) () -> Bool
14
32
// CHECK-NEXT: [[C1:%.*]] = apply [[C1_REF]]() : $@convention(thin) () -> Bool
15
33
// CHECK-NEXT: function_ref A.init(b:c:)
16
34
// CHECK-NEXT: [[A1_REF:%.*]] = function_ref @$s27stored_property_default_arg1AV1b1cACSi_SbtcfC : $@convention(method) (Int, Bool, @thin A.Type) -> A
@@ -26,15 +44,24 @@ func checkConcreteType() {
26
44
let e = A ( c: true )
27
45
}
28
46
47
+ // CHECK: default argument 1 of F.init(g:h:)
48
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1FV1g1hACyxGx_SitcfcfA0_ : $@convention(thin) <T> () -> Int {
49
+ // CHECK-NEXT: bb0:
50
+ // CHECK-NEXT: function_ref variable initialization expression of F.h
51
+ // CHECK-NEXT: [[F_H_REF:%.*]] = function_ref @$s27stored_property_default_arg1FV1hSivpfi : $@convention(thin) <τ_0_0> () -> Int
52
+ // CHECK-NEXT: [[F_H:%.*]] = apply [[F_H_REF]]<T>() : $@convention(thin) <τ_0_0> () -> Int
53
+ // CHECK-NEXT: return [[F_H]] : $Int
54
+ // CHECK-NEXT: }
55
+
29
56
struct F < T> {
30
57
var g : T
31
58
var h : Int = 0
32
59
}
33
60
34
61
// CHECK-LABEL: sil hidden [ossa] @$s27stored_property_default_arg16checkGenericTypeyyF : $@convention(thin) () -> () {
35
62
func checkGenericType( ) {
36
- // CHECK: function_ref variable initialization expression of F.h
37
- // CHECK-NEXT: [[H1_REF:%.*]] = function_ref @$s27stored_property_default_arg1FV1hSivpfi : $@convention(thin) <τ_0_0> () -> Int
63
+ // CHECK: function_ref default argument 1 of F.init(g:h:)
64
+ // CHECK-NEXT: [[H1_REF:%.*]] = function_ref @$s27stored_property_default_arg1FV1g1hACyxGx_SitcfcfA0_ : $@convention(thin) <τ_0_0> () -> Int
38
65
// CHECK-NEXT: [[H1:%.*]] = apply [[H1_REF]]<Int>() : $@convention(thin) <τ_0_0> () -> Int
39
66
// CHECK-NEXT: function_ref F.init(g:h:)
40
67
// CHECK-NEXT: [[F1_REF:%.*]] = function_ref @$s27stored_property_default_arg1FV1g1hACyxGx_SitcfC : $@convention(method) <τ_0_0> (@in τ_0_0, Int, @thin F<τ_0_0>.Type) -> @out F<τ_0_0>
@@ -63,3 +90,92 @@ func checkOptionalNil() {
63
90
// CHECK-NEXT: {{.*}} = apply [[J2_REF]]([[K1_REF]], {{.*}}, {{.*}}) : $@convention(method) (Optional<Bool>, Optional<Int>, @thin J.Type) -> J
64
91
let n = J ( l: 316 )
65
92
}
93
+
94
+ // CHECK: default argument 0 of O.init(p:q:)
95
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1OV1p1qACyxGx_x_SittcfcfA_ : $@convention(thin) <T where T : ExpressibleByIntegerLiteral> () -> @out T {
96
+ // CHECK: bb0([[PARAM_0:.*]] : $*T):
97
+ // CHECK-NEXT: function_ref variable initialization expression of O.p
98
+ // CHECK-NEXT: [[O_P_REF:%.*]] = function_ref @$s27stored_property_default_arg1OV1pxvpfi : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> @out τ_0_0
99
+ // CHECK-NEXT: [[O_P:%.*]] = apply [[O_P_REF]]<T>([[PARAM_0]]) : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> @out τ_0_0
100
+ // CHECK-NEXT: [[RETURN:%.*]] = tuple ()
101
+ // CHECK-NEXT: return [[RETURN]] : $()
102
+ // CHECK-NEXT: }
103
+
104
+ // CHECK: default argument 1 of O.init(p:q:)
105
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1OV1p1qACyxGx_x_SittcfcfA0_ : $@convention(thin) <T where T : ExpressibleByIntegerLiteral> () -> (@out T, Int) {
106
+ // CHECK: bb0([[PARAM_0:.*]] : $*T):
107
+ // CHECK-NEXT: function_ref variable initialization expression of O.q
108
+ // CHECK-NEXT: [[O_Q_REF:%.*]] = function_ref @$s27stored_property_default_arg1OV1qx_Sitvpfi : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> (@out τ_0_0, Int)
109
+ // CHECK-NEXT: [[O_Q:%.*]] = apply [[O_Q_REF]]<T>([[PARAM_0]]) : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> (@out τ_0_0, Int)
110
+ // CHECK-NEXT: return [[O_Q]] : $Int
111
+ // CHECK-NEXT: }
112
+
113
+ struct O < T: ExpressibleByIntegerLiteral > {
114
+ var p : T = 0
115
+ var q : ( T , Int ) = ( 0 , 0 )
116
+ }
117
+
118
+ // CHECK-LABEL: sil hidden [ossa] @$s27stored_property_default_arg13checkIndirectyyF : $@convention(thin) () -> () {
119
+ func checkIndirect( ) {
120
+ // CHECK: function_ref default argument 0 of O.init(p:q:)
121
+ // CHECK-NEXT: [[P1_REF:%.*]] = function_ref @$s27stored_property_default_arg1OV1p1qACyxGx_x_SittcfcfA_ : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> @out τ_0_0
122
+ // CHECK-NEXT: [[TMP1:%.*]] = alloc_stack $Int
123
+ // CHECK-NEXT: [[P1:%.*]] = apply [[P1_REF]]<Int>([[TMP1]]) : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> @out τ_0_0
124
+ // CHECK: function_ref O.init(p:q:)
125
+ // CHECK-NEXT: [[O1_REF:%.*]] = function_ref @$s27stored_property_default_arg1OV1p1qACyxGx_x_SittcfC : $@convention(method) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> (@in τ_0_0, @in τ_0_0, Int, @thin O<τ_0_0>.Type) -> @out O<τ_0_0>
126
+ // CHECK-NEXT: [[O1:%.*]] = apply [[O1_REF]]<Int>({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}) : $@convention(method) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> (@in τ_0_0, @in τ_0_0, Int, @thin O<τ_0_0>.Type) -> @out O<τ_0_0>
127
+ let r = O ( q: ( 128 , 316 ) )
128
+
129
+ // CHECK: function_ref default argument 1 of O.init(p:q:)
130
+ // CHECK-NEXT: [[Q1_REF:%.*]] = function_ref @$s27stored_property_default_arg1OV1p1qACyxGx_x_SittcfcfA0_ : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> (@out τ_0_0, Int)
131
+ // CHECK-NEXT: [[TMP2:%.*]] = alloc_stack $Int
132
+ // CHECK-NEXT: [[Q1:%.*]] = apply [[Q1_REF]]<Int>([[TMP2]]) : $@convention(thin) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> () -> (@out τ_0_0, Int)
133
+ // CHECK: function_ref O.init(p:q:)
134
+ // CHECK-NEXT: [[O2_REF:%.*]] = function_ref @$s27stored_property_default_arg1OV1p1qACyxGx_x_SittcfC : $@convention(method) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> (@in τ_0_0, @in τ_0_0, Int, @thin O<τ_0_0>.Type) -> @out O<τ_0_0>
135
+ // CHECK-NEXT: [[O2:%.*]] = apply [[O2_REF]]<Int>({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}) : $@convention(method) <τ_0_0 where τ_0_0 : ExpressibleByIntegerLiteral> (@in τ_0_0, @in τ_0_0, Int, @thin O<τ_0_0>.Type) -> @out O<τ_0_0>
136
+ let s = O ( p: 316 )
137
+ }
138
+
139
+ // CHECK: default argument 0 of U.init(v:w:)
140
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1UV1v1wAcA1TCSg_AGtcfcfA_ : $@convention(thin) () -> @owned Optional<T> {
141
+ // CHECK-NEXT: bb0:
142
+ // CHECK-NEXT: function_ref variable initialization expression of U.v
143
+ // CHECK-NEXT: [[U_V_REF:%.*]] = function_ref @$s27stored_property_default_arg1UV1vAA1TCSgvpfi : $@convention(thin) () -> @owned Optional<T>
144
+ // CHECK-NEXT: [[U_V:%.*]] = apply [[U_V_REF]]() : $@convention(thin) () -> @owned Optional<T>
145
+ // CHECK-NEXT: return [[U_V]] : $Optional<T>
146
+ // CHECK-NEXT: }
147
+
148
+ // CHECK: default argument 1 of U.init(v:w:)
149
+ // CHECK-NEXT: sil hidden [ossa] @$s27stored_property_default_arg1UV1v1wAcA1TCSg_AGtcfcfA0_ : $@convention(thin) () -> @owned T {
150
+ // CHECK-NEXT: bb0:
151
+ // CHECK-NEXT: function_ref variable initialization expression of U.w
152
+ // CHECK-NEXT: [[U_W_REF:%.*]] = function_ref @$s27stored_property_default_arg1UV1wAA1TCvpfi : $@convention(thin) () -> @owned T
153
+ // CHECK-NEXT: [[U_W:%.*]] = apply [[U_W_REF]]() : $@convention(thin) () -> @owned T
154
+ // CHECK-NEXT: return [[U_W]] : $T
155
+ // CHECK-NEXT: }
156
+
157
+ class T { }
158
+
159
+ struct U {
160
+ weak var v = T ( )
161
+ unowned var w = T ( )
162
+ }
163
+
164
+ // CHECK-LABEL: sil hidden [ossa] @$s27stored_property_default_arg19checkReferenceTypesyyF : $@convention(thin) () -> () {
165
+ func checkReferenceTypes( ) {
166
+ // CHECK: function_ref default argument 0 of U.init(v:w:)
167
+ // CHECK-NEXT: [[V1_REF:%.*]] = function_ref @$s27stored_property_default_arg1UV1v1wAcA1TCSg_AGtcfcfA_ : $@convention(thin) () -> @owned Optional<T>
168
+ // CHECK-NEXT: [[V1:%.*]] = apply [[V1_REF]]() : $@convention(thin) () -> @owned Optional<T>
169
+ // CHECK-NEXT: function_ref U.init(v:w:)
170
+ // CHECK-NEXT: [[U1_REF:%.*]] = function_ref @$s27stored_property_default_arg1UV1v1wAcA1TCSg_AGtcfC : $@convention(method) (@owned Optional<T>, @owned T, @thin U.Type) -> @out U
171
+ // CHECK-NEXT: [[U1:%.*]] = apply [[U1_REF]]({{.*}}, [[V1]], {{.*}}, {{.*}}) : $@convention(method) (@owned Optional<T>, @owned T, @thin U.Type) -> @out U
172
+ let x = U ( w: T ( ) )
173
+
174
+ // CHECK: function_ref default argument 1 of U.init(v:w:)
175
+ // CHECK-NEXT: [[W1_REF:%.*]] = function_ref @$s27stored_property_default_arg1UV1v1wAcA1TCSg_AGtcfcfA0_ : $@convention(thin) () -> @owned T
176
+ // CHECK-NEXT: [[W1:%.*]] = apply [[W1_REF]]() : $@convention(thin) () -> @owned T
177
+ // CHECK-NEXT: function_ref U.init(v:w:)
178
+ // CHECK-NEXT: [[U2_REF:%.*]] = function_ref @$s27stored_property_default_arg1UV1v1wAcA1TCSg_AGtcfC : $@convention(method) (@owned Optional<T>, @owned T, @thin U.Type) -> @out U
179
+ // CHECK-NEXT: [[U2:%.*]] = apply [[U2_REF]]({{.*}}, {{.*}}, [[W1]], {{.*}}) : $@convention(method) (@owned Optional<T>, @owned T, @thin U.Type) -> @out U
180
+ let y = U ( v: T ( ) )
181
+ }
0 commit comments