| // RUN: %target-sil-opt %s | %FileCheck %s |
| |
| // thunk for @escaping @callee_guaranteed () -> () |
| // Check that the [without_actually_escaping] thunk attribute is parsed and printed. |
| // CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] [without_actually_escaping] [ossa] @testWithoutActuallyEscapingThunk : $@convention(thin) (@guaranteed @callee_guaranteed () -> ()) -> () { |
| sil shared [transparent] [serializable] [reabstraction_thunk] [without_actually_escaping] [ossa] @testWithoutActuallyEscapingThunk : $@convention(thin) (@guaranteed @callee_guaranteed () -> ()) -> () { |
| bb0(%0 : @guaranteed $@callee_guaranteed () -> ()): |
| %1 = apply %0() : $@callee_guaranteed () -> () |
| return %1 : $() |
| } |
| |
| // Check that the convert_function [without_actually_escaping] attribute is parsed and printed. |
| // CHECK-LABEL: sil hidden [ossa] @testWithoutActuallyEscapingBlock : $@convention(thin) (@guaranteed @convention(block) @noescape () -> ()) -> () { |
| // CHECK: convert_function %0 : $@convention(block) @noescape () -> () to [without_actually_escaping] $@convention(block) () -> () |
| sil hidden [ossa] @testWithoutActuallyEscapingBlock : $@convention(thin) (@guaranteed @convention(block) @noescape () -> ()) -> () { |
| bb0(%0 : @guaranteed $@convention(block) @noescape () -> ()): |
| %cvt = convert_function %0 : $@convention(block) @noescape () -> () to [without_actually_escaping] $@convention(block) () -> () |
| %f = function_ref @closure1 : $@convention(thin) (@guaranteed @convention(block) () -> ()) -> () |
| %call = apply %f(%cvt) : $@convention(thin) (@guaranteed @convention(block) () -> ()) -> () |
| destroy_value %cvt : $@convention(block) () -> () |
| %v = tuple () |
| return %v : $() |
| } |
| |
| // closure #1 in testBlock(block:) |
| sil private [ossa] @closure1 : $@convention(thin) (@guaranteed @convention(block) () -> ()) -> () { |
| bb0(%0 : @guaranteed $@convention(block) () -> ()): |
| %call = apply %0() : $@convention(block) () -> () |
| %v = tuple () |
| return %v : $() |
| } |
| |