@@ -87,10 +87,11 @@ sil @$s4test1ZCfD : $@convention(method) (@owned Z) -> () {
8787// CHECK-LABEL: sil @load_store_to_args
8888// CHECK-NEXT: [%0: read v**]
8989// CHECK-NEXT: [%1: write v**]
90- // CHECK-NEXT: [%2: write c0.v**]
90+ // CHECK-NEXT: [%2: noescape **, write c0.v**]
9191// CHECK-NEXT: [global: ]
9292// CHECK-NEXT: {{^[^[]}}
9393sil @load_store_to_args : $@convention(thin) (@inout Int32, @inout Int32, @guaranteed X) -> () {
94+ [%2: noescape **]
9495bb0(%0 : $*Int32, %1 : $*Int32, %2 : $X):
9596 %l1 = load %0 : $*Int32
9697 store %l1 to %1 : $*Int32
@@ -971,11 +972,13 @@ bb0(%0 : @guaranteed $S):
971972}
972973
973974// CHECK-LABEL: sil [ossa] @storeToArgs
974- // CHECK-NEXT: [%0: write c0.v**]
975- // CHECK-NEXT: [%1: write c0.v**]
975+ // CHECK-NEXT: [%0: noescape **, write c0.v**]
976+ // CHECK-NEXT: [%1: noescape **, write c0.v**]
976977// CHECK-NEXT: [global: ]
977978// CHECK-NEXT: {{^[^[]}}
978979sil [ossa] @storeToArgs : $@convention(thin) (@guaranteed List, @guaranteed List) -> () {
980+ [%0: noescape **]
981+ [%1: noescape **]
979982bb0(%1 : @guaranteed $List, %2 : @guaranteed $List):
980983 cond_br undef, bb1, bb2
981984
@@ -1195,3 +1198,39 @@ bb0(%0 : $*T):
11951198 %r = tuple()
11961199 return %r : $()
11971200}
1201+
1202+ sil @store_owned_to_out : $@convention(thin) (@owned SP) -> @out SP {
1203+ [%0: noescape **, write v**]
1204+ [%1: escape v** -> %0.v**]
1205+ [global: ]
1206+ }
1207+
1208+ // CHECK-LABEL: sil @test_escaping_arg1
1209+ // CHECK-NEXT: [%0: write v**.c*.v**, copy v**.c*.v**, destroy v**.c*.v**]
1210+ // CHECK-NEXT: [global: write,copy,destroy]
1211+ // CHECK-NEXT: {{^[^[]}}
1212+ sil @test_escaping_arg1 : $@convention(thin) (@owned SP) -> () {
1213+ bb0(%0 : $SP):
1214+ %1 = alloc_stack $SP
1215+ %2 = function_ref @store_owned_to_out : $@convention(thin) (@owned SP) -> @out SP
1216+ %3 = apply %2(%1, %0) : $@convention(thin) (@owned SP) -> @out SP
1217+ %4 = struct_element_addr %1 : $*SP, #SP.value
1218+ %5 = load %4 : $*X
1219+ strong_release %5 : $X
1220+ dealloc_stack %1 : $*SP
1221+ %r = tuple ()
1222+ return %r : $()
1223+ }
1224+
1225+ // CHECK-LABEL: sil @test_escaping_arg2
1226+ // CHECK-NEXT: [%0: read v**.c*.v**, write v**.c*.v**, copy v**.c*.v**, destroy v**.c*.v**]
1227+ // CHECK-NEXT: [global: read,write,copy,destroy,allocate,deinit_barrier]
1228+ // CHECK-NEXT: {{^[^[]}}
1229+ sil @test_escaping_arg2 : $@convention(thin) (@owned SP) -> () {
1230+ bb0(%0 : $SP):
1231+ %1 = function_ref @forward_to_return : $@convention(thin) (@owned SP) -> @owned SP
1232+ %2 = apply %1(%0) : $@convention(thin) (@owned SP) -> @owned SP
1233+ release_value %2 : $SP
1234+ %r = tuple ()
1235+ return %r : $()
1236+ }
0 commit comments