@@ -87,10 +87,11 @@ sil @$s4test1ZCfD : $@convention(method) (@owned Z) -> () {
87
87
// CHECK-LABEL: sil @load_store_to_args
88
88
// CHECK-NEXT: [%0: read v**]
89
89
// CHECK-NEXT: [%1: write v**]
90
- // CHECK-NEXT: [%2: write c0.v**]
90
+ // CHECK-NEXT: [%2: noescape **, write c0.v**]
91
91
// CHECK-NEXT: [global: ]
92
92
// CHECK-NEXT: {{^[^[]}}
93
93
sil @load_store_to_args : $@convention(thin) (@inout Int32, @inout Int32, @guaranteed X) -> () {
94
+ [%2: noescape **]
94
95
bb0(%0 : $*Int32, %1 : $*Int32, %2 : $X):
95
96
%l1 = load %0 : $*Int32
96
97
store %l1 to %1 : $*Int32
@@ -971,11 +972,13 @@ bb0(%0 : @guaranteed $S):
971
972
}
972
973
973
974
// 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**]
976
977
// CHECK-NEXT: [global: ]
977
978
// CHECK-NEXT: {{^[^[]}}
978
979
sil [ossa] @storeToArgs : $@convention(thin) (@guaranteed List, @guaranteed List) -> () {
980
+ [%0: noescape **]
981
+ [%1: noescape **]
979
982
bb0(%1 : @guaranteed $List, %2 : @guaranteed $List):
980
983
cond_br undef, bb1, bb2
981
984
@@ -1195,3 +1198,39 @@ bb0(%0 : $*T):
1195
1198
%r = tuple()
1196
1199
return %r : $()
1197
1200
}
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