@@ -174,6 +174,15 @@ bb0(%0 : $@callee_owned (@owned A) -> ()):
174
174
return %3 : $()
175
175
}
176
176
177
+ // CHECK-LABEL: sil shared {{.*}} @_TTS{{.*}}use_closure_throw : $@convention(thin) (@owned A) -> @error ErrorProtocol {
178
+ sil hidden [noinline] @use_closure_throw : $@convention(thin) (@owned @callee_owned (@owned A) -> ()) -> @error ErrorProtocol {
179
+ bb0(%0 : $@callee_owned (@owned A) -> ()):
180
+ %1 = alloc_ref $A
181
+ %2 = apply %0(%1) : $@callee_owned (@owned A) -> ()
182
+ %3 = tuple ()
183
+ return %3 : $()
184
+ }
185
+
177
186
// CHECK-LABEL: sil {{.*}} @different_execution_counts
178
187
// CHECK: bb0([[ARG:%.*]] : $A
179
188
// CHECK: strong_retain [[ARG]]
@@ -373,6 +382,45 @@ bb3:
373
382
return %11 : $()
374
383
}
375
384
385
+ // CHECK-LABEL: sil @insert_release_after_try_apply
386
+ // CHECK: bb0(%0 : $A):
387
+ // CHECK: retain_value %0
388
+ // CHECK: bb1:
389
+ // CHECK: retain_value %0
390
+ // CHECK-NEXT: try_apply
391
+ // CHECK: bb2(%{{[0-9]+}} : $()):
392
+ // CHECK-NEXT: strong_release %0
393
+ // CHECK-NEXT: release_value %0
394
+ // CHECK-NEXT: br bb4
395
+ // CHECK: bb3(%{{[0-9]+}} : $ErrorProtocol):
396
+ // CHECK-NEXT: strong_release %0
397
+ // CHECK-NEXT: release_value %0
398
+ // CHECK-NEXT: br bb4
399
+ // CHECK: bb4:
400
+ // CHECK-NOT: %0
401
+ // CHECK: return
402
+ sil @insert_release_after_try_apply : $@convention(thin) (@guaranteed A) -> () {
403
+ bb0(%0 : $A):
404
+ %2 = function_ref @closure : $@convention(thin) (@owned A, @owned A) -> ()
405
+ %3 = partial_apply %2(%0) : $@convention(thin) (@owned A, @owned A) -> ()
406
+ %8 = function_ref @use_closure_throw : $@convention(thin) (@owned @callee_owned (@owned A) -> ()) -> @error ErrorProtocol
407
+ br bb1
408
+
409
+ bb1:
410
+ strong_retain %3 : $@callee_owned (@owned A) -> ()
411
+ try_apply %8(%3) : $@convention(thin) (@owned @callee_owned (@owned A) -> ()) -> @error ErrorProtocol, normal bb2, error bb3
412
+
413
+ bb2(%n : $()):
414
+ br bb4
415
+
416
+ bb3(%e : $ErrorProtocol):
417
+ br bb4
418
+
419
+ bb4:
420
+ %11 = tuple ()
421
+ return %11 : $()
422
+ }
423
+
376
424
377
425
// Ensure that we can specialize and properly mangle functions that take closures with @box arguments.
378
426
0 commit comments