@@ -741,3 +741,82 @@ bb0(%0 : $Int, %another: $Array<Int>):
741741 %24 = tuple ()
742742 return %24 : $()
743743}
744+
745+
746+ // CHECK-LABEL: sil @promote_with_unreachable_block_nest_bug
747+ // CHECK: bb3:
748+ // CHECK: dealloc_ref [stack] %{{.*}}
749+ // CHECK: bb4:
750+ // CHECK: br bb5
751+ // CHECK: bb5:
752+ // CHECK: dealloc_ref [stack] %{{.*}}
753+ // CHECK: bb6:
754+ // CHECK: dealloc_ref [stack] %{{.*}}
755+ // CHECK: bb11:
756+ // CHECK: alloc_ref [stack] $XX
757+ // CHECK: return
758+ sil @promote_with_unreachable_block_nest_bug : $@convention(thin) () -> Int32 {
759+ bb0:
760+ %0 = alloc_stack $Builtin.Int32 // user: %30
761+ %1 = alloc_stack $Builtin.Int32 // users: %29, %27
762+ cond_br undef, bb1, bb7 // id: %2
763+
764+ bb1: // Preds: bb0
765+ br bb14 // id: %3
766+
767+ bb2: // Preds: bb10
768+ cond_br undef, bb5, bb3 // id: %4
769+
770+ bb3: // Preds: bb2
771+ strong_release %20 : $XX // id: %5
772+ br bb6 // id: %6
773+
774+ bb4: // Preds: bb10
775+ %7 = integer_literal $Builtin.Int32, 0 // user: %8
776+ %8 = struct $Int32 (%7 : $Builtin.Int32) // user: %9
777+ br bb13(%8 : $Int32) // id: %9
778+
779+ bb5: // Preds: bb2
780+ strong_release %20 : $XX // id: %10
781+ br bb6 // id: %11
782+
783+ bb6: // Preds: bb5 bb3
784+ br bb12 // id: %12
785+
786+ bb7: // Preds: bb0
787+ cond_br undef, bb8, bb9 // id: %13
788+
789+ bb8: // Preds: bb7
790+ cond_br undef, bb10, bb11 // id: %14
791+
792+ bb9: // Preds: bb7
793+ %15 = integer_literal $Builtin.Int32, 0 // user: %16
794+ %16 = struct $Int32 (%15 : $Builtin.Int32) // user: %17
795+ br bb13(%16 : $Int32) // id: %17
796+
797+ bb10: // Preds: bb8
798+ %18 = alloc_ref $XX // user: %20
799+ // function_ref xx_init
800+ %19 = function_ref @xx_init : $@convention(thin) (@guaranteed XX) -> XX // user: %20
801+ %20 = apply %19(%18) : $@convention(thin) (@guaranteed XX) -> XX // users: %21, %5, %10
802+ %21 = ref_element_addr %20 : $XX, #XX.x // user: %22
803+ %22 = load %21 : $*Int32
804+ cond_br undef, bb2, bb4 // id: %23
805+
806+ bb11: // Preds: bb8
807+ unreachable // id: %24
808+
809+ bb12: // Preds: bb6
810+ br bb14 // id: %25
811+
812+ bb13(%26 : $Int32): // Preds: bb9 bb4
813+ dealloc_stack %1 : $*Builtin.Int32 // id: %27
814+ unreachable // id: %28
815+
816+ bb14: // Preds: bb12 bb1
817+ dealloc_stack %1 : $*Builtin.Int32 // id: %29
818+ dealloc_stack %0 : $*Builtin.Int32 // id: %30
819+ %31 = integer_literal $Builtin.Int32, 0 // user: %32
820+ %32 = struct $Int32 (%31 : $Builtin.Int32) // user: %33
821+ return %32 : $Int32 // id: %33
822+ } // end sil function 'promote_with_unreachable_block_nest_bug'
0 commit comments