@@ -817,6 +817,90 @@ die:
817817 unreachable
818818}
819819
820+ // CHECK-LABEL: begin running test {{.*}} on load_borrow_of_store_borrow_1: ossa_lifetime_completion
821+ // CHECK-LABEL: sil [ossa] @load_borrow_of_store_borrow_1 : {{.*}} {
822+ // CHECK: [[TOKEN:%[^,]+]] = store_borrow
823+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[TOKEN]]
824+ // CHECK: [[BORROW:%[^,]+]] = begin_borrow [[LOAD]]
825+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
826+ // CHECK: [[DIE]]:
827+ // CHECK-NEXT: end_borrow [[BORROW]]
828+ // CHECK-NEXT: end_borrow [[LOAD]]
829+ // CHECK-NEXT: end_borrow [[TOKEN]]
830+ // CHECK-NEXT: unreachable
831+ // CHECK-LABEL: } // end sil function 'load_borrow_of_store_borrow_1'
832+ // CHECK-LABEL: end running test {{.*}} on load_borrow_of_store_borrow_1: ossa_lifetime_completion
833+ sil [ossa] @load_borrow_of_store_borrow_1 : $@convention(thin) (@guaranteed C) -> () {
834+ entry(%instance : @guaranteed $C):
835+ specify_test "ossa_lifetime_completion %token availability"
836+ %addr = alloc_stack $C
837+ %token = store_borrow %instance to %addr : $*C
838+ %load = load_borrow %token : $*C
839+ %borrow = begin_borrow %load : $C
840+ cond_br undef, exit, die
841+
842+ exit:
843+ end_borrow %borrow : $C
844+ end_borrow %load : $C
845+ end_borrow %token : $*C
846+ dealloc_stack %addr : $*C
847+ %retval = tuple ()
848+ return %retval : $()
849+ die:
850+ unreachable
851+ }
852+
853+ // CHECK-LABEL: begin running test {{.*}} on load_borrow_of_store_borrow_2: ossa_lifetime_completion
854+ // CHECK-LABEL: sil [ossa] @load_borrow_of_store_borrow_2 : {{.*}} {
855+ // CHECK: [[TOKEN:%[^,]+]] = store_borrow
856+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[TOKEN]]
857+ // CHECK: [[BORROW:%[^,]+]] = begin_borrow [[LOAD]]
858+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
859+ // CHECK: [[DIE]]:
860+ // CHECK-NEXT: end_borrow [[BORROW]]
861+ // CHECK-NEXT: end_borrow [[LOAD]]
862+ // CHECK-NEXT: end_borrow [[TOKEN]]
863+ // CHECK-NEXT: unreachable
864+ // CHECK-LABEL: } // end sil function 'load_borrow_of_store_borrow_2'
865+ // CHECK-LABEL: end running test {{.*}} on load_borrow_of_store_borrow_2: ossa_lifetime_completion
866+ sil [ossa] @load_borrow_of_store_borrow_2 : $@convention(thin) (@guaranteed C) -> () {
867+ entry(%instance : @guaranteed $C):
868+ specify_test "ossa_lifetime_completion %token availability"
869+ %addr = alloc_stack $C
870+ %token = store_borrow %instance to %addr : $*C
871+ %load = load_borrow %token : $*C
872+ %borrow = begin_borrow %load : $C
873+ cond_br undef, exit, die
874+
875+ exit:
876+ end_borrow %borrow : $C
877+ end_borrow %load : $C
878+ end_borrow %token : $*C
879+ dealloc_stack %addr : $*C
880+ %retval = tuple ()
881+ return %retval : $()
882+ die:
883+ end_borrow %borrow : $C
884+ end_borrow %load : $C
885+ unreachable
886+ }
887+
888+ sil [ossa] @load_borrow_1 : $@convention(thin) (@in_guaranteed C) -> () {
889+ entry(%addr : $*C):
890+ specify_test "ossa_lifetime_completion %load availability"
891+ %load = load_borrow %addr : $*C
892+ %borrow = begin_borrow %load : $C
893+ cond_br undef, exit, die
894+
895+ exit:
896+ end_borrow %borrow : $C
897+ end_borrow %load : $C
898+ %retval = tuple ()
899+ return %retval : $()
900+ die:
901+ unreachable
902+ }
903+
820904// CHECK-LABEL: begin running test {{.*}} on begin_access: ossa_lifetime_completion
821905// CHECK-LABEL: sil [ossa] @begin_access : {{.*}} {
822906// CHECK: [[TOKEN:%[^,]+]] = begin_access
@@ -841,3 +925,34 @@ exit:
841925die:
842926 unreachable
843927}
928+
929+ // CHECK-LABEL: begin running test {{.*}} on load_borrow_of_begin_access: ossa_lifetime_completion
930+ // CHECK-LABEL: sil [ossa] @load_borrow_of_begin_access : {{.*}} {
931+ // CHECK: [[ACCESS:%[^,]+]] = begin_access
932+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[ACCESS]]
933+ // CHECK: [[BORROW:%[^,]+]] = begin_borrow [[LOAD]]
934+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
935+ // CHECK: [[DIE]]:
936+ // CHECK-NEXT: end_borrow [[BORROW]]
937+ // CHECK-NEXT: end_borrow [[LOAD]]
938+ // CHECK-NEXT: end_access [[ACCESS]]
939+ // CHECK-NEXT: unreachable
940+ // CHECK-LABEL: } // end sil function 'load_borrow_of_begin_access'
941+ // CHECK-LABEL: end running test {{.*}} on load_borrow_of_begin_access: ossa_lifetime_completion
942+ sil [ossa] @load_borrow_of_begin_access : $@convention(thin) (@in_guaranteed C) -> () {
943+ entry(%addr : $*C):
944+ specify_test "ossa_lifetime_completion %access availability"
945+ %access = begin_access [static] [read] %addr : $*C
946+ %load = load_borrow %access : $*C
947+ %borrow = begin_borrow %load : $C
948+ cond_br undef, exit, die
949+
950+ exit:
951+ end_borrow %borrow : $C
952+ end_borrow %load : $C
953+ end_access %access : $*C
954+ %retval = tuple ()
955+ return %retval : $()
956+ die:
957+ unreachable
958+ }
0 commit comments