File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed
test/SILOptimizer/lifetime_dependence Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change @@ -49,6 +49,17 @@ struct Holder {
49
49
var c : C ? = nil
50
50
}
51
51
52
+ // Generic non-Escapable for indirect values.
53
+ struct GNE < T> : ~ Escapable {
54
+ let t : T
55
+ @lifetime ( borrow t)
56
+ init ( t: borrowing T ) { self . t = copy t }
57
+ }
58
+
59
+ @_silgen_name ( " forward " )
60
+ @lifetime ( copy arg)
61
+ func forward< T> ( _ arg: GNE < T > ) -> GNE < T >
62
+
52
63
@_silgen_name ( " getGeneric " )
53
64
@lifetime ( borrow holder)
54
65
func getGeneric< T : ~ Escapable> ( _ holder: borrowing Holder , _: T . Type ) -> T
@@ -156,3 +167,26 @@ func testClosureCapture1(_ a: HasMethods) {
156
167
}
157
168
*/
158
169
}
170
+
171
+ // =============================================================================
172
+ // Indirect ~Escapable results
173
+ // =============================================================================
174
+
175
+ @lifetime ( copy arg1)
176
+ func testIndirectForwardedResult< T> ( arg1: GNE < T > ) -> GNE < T > {
177
+ forward ( arg1)
178
+ }
179
+
180
+ @lifetime ( copy arg1)
181
+ func testIndirectNonForwardedResult< T> ( arg1: GNE < T > , arg2: GNE < T > ) -> GNE < T > {
182
+ // expected-error @-1{{lifetime-dependent variable 'arg2' escapes its scope}}
183
+ // expected-note @-2{{it depends on the lifetime of argument 'arg2'}}
184
+ forward ( arg2) // expected-note {{this use causes the lifetime-dependent value to escape}}
185
+ }
186
+
187
+ func testIndirectClosureResult< T> ( f: ( ) -> GNE < T > ) -> GNE < T > {
188
+ f ( )
189
+ // expected-error @-1{{lifetime-dependent variable '$return_value' escapes its scope}}
190
+ // expected-note @-3{{it depends on the lifetime of argument '$return_value'}}
191
+ // expected-note @-3{{this use causes the lifetime-dependent value to escape}}
192
+ }
You can’t perform that action at this time.
0 commit comments