@@ -679,3 +679,44 @@ exit:
679679 %retval = tuple ()
680680 return %retval : $()
681681}
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