@@ -679,3 +679,44 @@ exit:
679
679
%retval = tuple ()
680
680
return %retval : $()
681
681
}
682
+
683
+ // CHECK-LABEL: sil hidden [ossa] @add_end_borrow_after_destroy_value : {{.*}} {
684
+ // CHECK: bb0({{%[^,]+}} : $Builtin.Int1, [[INSTANCE_1:%[^,]+]] : @owned $Klass, {{%[^,]+}} : @owned $Klass):
685
+ // CHECK: [[LIFETIME_1:%[^,]+]] = begin_borrow [[INSTANCE_1]]
686
+ // CHECK: copy_value [[LIFETIME_1]]
687
+ // CHECK: cond_br {{%[^,]+}}, [[BASIC_BLOCK1:bb[0-9]+]], [[BASIC_BLOCK2:bb[0-9]+]]
688
+ // CHECK: [[BASIC_BLOCK1]]:
689
+ // CHECK: end_borrow [[LIFETIME_1]]
690
+ // CHECK: destroy_value [[INSTANCE_1]]
691
+ // CHECK: [[BASIC_BLOCK2]]:
692
+ // CHECK: end_borrow [[LIFETIME_1]]
693
+ // CHECK: destroy_value [[INSTANCE_1]]
694
+ // CHECK-LABEL: } // end sil function 'add_end_borrow_after_destroy_value'
695
+ sil hidden [ossa] @add_end_borrow_after_destroy_value : $@convention(thin) (Builtin.Int1, @owned Klass, @owned Klass) -> () {
696
+ bb0(%condition : $Builtin.Int1, %instance_1 : @owned $Klass, %instance_2 : @owned $Klass):
697
+ %lifetime_1 = begin_borrow %instance_1 : $Klass
698
+
699
+ %copy_1 = copy_value %lifetime_1 : $Klass
700
+ %stack_addr = alloc_stack $Klass
701
+ store %copy_1 to [init] %stack_addr : $*Klass
702
+ destroy_addr %stack_addr : $*Klass
703
+ dealloc_stack %stack_addr : $*Klass
704
+
705
+ cond_br %condition, bb1, bb2
706
+
707
+ bb1:
708
+ end_borrow %lifetime_1 : $Klass
709
+ destroy_value %instance_1 : $Klass
710
+ %lifetime_2 = begin_borrow %instance_2 : $Klass
711
+ br bb3(%instance_2 : $Klass, %lifetime_2 : $Klass)
712
+
713
+ bb2:
714
+ destroy_value %instance_2 : $Klass
715
+ br bb3(%instance_1 : $Klass, %lifetime_1 : $Klass)
716
+
717
+ bb3(%original : @owned $Klass, %lifetime : @guaranteed $Klass):
718
+ end_borrow %lifetime : $Klass
719
+ destroy_value %original : $Klass
720
+ %result = tuple ()
721
+ return %result : $()
722
+ }
0 commit comments