@@ -336,11 +336,15 @@ func s210______compErasure(_ x: Foo & Error) -> Error {
336
336
// CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s220_____openExistBoxSSs5Error_pF : $@convention(thin) (@owned Error) -> @owned String {
337
337
// CHECK: bb0([[ARG:%.*]] : $Error):
338
338
// CHECK: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
339
- // CHECK: [[OPAQUE_ARG:%.*]] = open_existential_box [[BORROWED_ARG]] : $Error to $@opened({{.*}}) Error
340
- // CHECK: [[RET_STRING:%.*]] = apply{{.*}}<@opened({{.*}}) Error>([[OPAQUE_ARG]]) : $@convention(witness_method) <τ_0_0 where τ_0_0 : Error> (@in_guaranteed τ_0_0) -> @owned String
339
+ // CHECK: [[OPAQUE_ARG:%.*]] = open_existential_box [[BORROWED_ARG]] : $Error to $*@opened({{.*}}) Error
340
+ // CHECK: [[ALLOC_OPEN:%.*]] = alloc_stack $@opened({{.*}}) Error
341
+ // CHECK: copy_addr [[OPAQUE_ARG]] to [initialization] [[ALLOC_OPEN]] : $*@opened({{.*}}) Error
342
+ // CHECK: [[LOAD_ALLOC:%.*]] = load [take] [[ALLOC_OPEN]]
343
+ // CHECK: destroy_value [[LOAD_ALLOC]]
344
+ // CHECK: dealloc_stack [[ALLOC_OPEN]]
341
345
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
342
346
// CHECK: destroy_value [[ARG]] : $Error
343
- // CHECK: return [[RET_STRING]] : $String
347
+ // CHECK: return {{.*}} : $String
344
348
// CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s220_____openExistBoxSSs5Error_pF'
345
349
func s220_____openExistBox( _ x: Error ) -> String {
346
350
return x. _domain
@@ -365,9 +369,32 @@ func s230______condFromAny(_ x: Any) {
365
369
}
366
370
}
367
371
372
+ // Tests LValue of error types / existential boxes
373
+ // ---
374
+ // CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s240_____propOfLValueSSs5Error_pF : $@convention(thin) (@owned Error) -> @owned String {
375
+ // CHECK: bb0([[ARG:%.*]] : $Error):
376
+ // CHECK: [[ALLOC_OF_BOX:%.*]] = alloc_box ${ var Error }
377
+ // CHECK: [[PROJ_BOX:%.*]] = project_box [[ALLOC_OF_BOX]]
378
+ // CHECK: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
379
+ // CHECK: [[COPY_ARG:%.*]] = copy_value [[BORROWED_ARG]]
380
+ // CHECK: store [[COPY_ARG]] to [init] [[PROJ_BOX]]
381
+ // CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
382
+ // CHECK: [[LOAD_BOX:%.*]] = load [copy] [[PROJ_BOX]]
383
+ // CHECK: [[OPAQUE_ARG:%.*]] = open_existential_box [[LOAD_BOX]] : $Error to $*@opened({{.*}}) Error
384
+ // CHECK: [[LOAD_OPAQUE:%.*]] = load [copy] [[OPAQUE_ARG]]
385
+ // CHECK: [[ALLOC_OPEN:%.*]] = alloc_stack $@opened({{.*}}) Error
386
+ // CHECK: store [[LOAD_OPAQUE]] to [init] [[ALLOC_OPEN]]
387
+ // CHECK: [[RET_VAL:%.*]] = apply {{.*}}<@opened({{.*}}) Error>([[ALLOC_OPEN]])
388
+ // CHECK: return [[RET_VAL]] : $String
389
+ // CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s240_____propOfLValueSSs5Error_pF'
390
+ func s240_____propOfLValue( _ x: Error ) -> String {
391
+ var x = x
392
+ return x. _domain
393
+ }
394
+
368
395
// Tests conditional value casts and correspondingly generated reabstraction thunk, with <T> types
369
396
// ---
370
- // CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s240_____condTFromAnyyyp_xtlF : $@convention(thin) <T> (@in Any, @in T) -> () {
397
+ // CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s250_____condTFromAnyyyp_xtlF : $@convention(thin) <T> (@in Any, @in T) -> () {
371
398
// CHECK: bb0([[ARG0:%.*]] : $Any, [[ARG1:%.*]] : $T):
372
399
// CHECK: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG0]]
373
400
// CHECK: [[COPY__ARG:%.*]] = copy_value [[BORROWED_ARG]]
@@ -377,8 +404,8 @@ func s230______condFromAny(_ x: Any) {
377
404
// CHECK: partial_apply [[THUNK_REF]]<T>([[THUNK_PARAM]])
378
405
// CHECK: bb6:
379
406
// CHECK: return %{{.*}} : $()
380
- // CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s240_____condTFromAnyyyp_xtlF '
381
- func s240_____condTFromAny < T> ( _ x: Any , _ y: T ) {
407
+ // CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s250_____condTFromAnyyyp_xtlF '
408
+ func s250_____condTFromAny < T> ( _ x: Any , _ y: T ) {
382
409
if let f = x as? ( Int , T ) -> ( Int , T ) {
383
410
f ( 42 , y)
384
411
}
0 commit comments