@@ -414,3 +414,44 @@ bb0(%0 : @owned $C):
414
414
store %0 to [init] %4 : $*C
415
415
unreachable
416
416
}
417
+
418
+ indirect enum IndirectEnumNontrivialPayload {
419
+ case c(C)
420
+ }
421
+
422
+ // CHECK-LABEL: sil [ossa] @project_box_owned : {{.*}} {
423
+ // CHECK: bb0([[IE:%[^,]+]] :
424
+ // CHECK: switch_enum [[IE]]
425
+ // CHECK-SAME: case #IndirectEnumNontrivialPayload.c!enumelt: [[ONE_CASE:bb[0-9]+]]
426
+ // CHECK: [[ONE_CASE]]([[BOX:%[^,]+]] :
427
+ // CHECK: [[C_ADDR:%[^,]+]] = project_box [[BOX]]
428
+ // CHECK: [[C:%[^,]+]] = load_borrow [[C_ADDR]]
429
+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[BASIC_BLOCK4:bb[0-9]+]]
430
+ // CHECK: [[BASIC_BLOCK4]]:
431
+ // CHECK: end_borrow [[C]]
432
+ // CHECK: destroy_value [[BOX]]
433
+ // CHECK: unreachable
434
+ // CHECK-LABEL: } // end sil function 'project_box_owned'
435
+ sil [ossa] @project_box_owned : $@convention(thin) (@owned IndirectEnumNontrivialPayload) -> () {
436
+ entry(%ie : @owned $IndirectEnumNontrivialPayload):
437
+ switch_enum %ie : $IndirectEnumNontrivialPayload, case #IndirectEnumNontrivialPayload.c!enumelt: one_case
438
+
439
+ one_case(%box : @owned ${ var C }):
440
+ specify_test "ossa-lifetime-completion %box"
441
+ %c_addr = project_box %box : ${ var C }, 0
442
+ %c = load_borrow %c_addr : $*C
443
+ cond_br undef, left, right
444
+
445
+ left:
446
+ end_borrow %c : $C
447
+ destroy_value %box : ${ var C }
448
+ br exit
449
+
450
+ exit:
451
+ %retval = tuple ()
452
+ return %retval : $()
453
+
454
+ right:
455
+ end_borrow %c : $C
456
+ unreachable
457
+ }
0 commit comments