| // RUN: %target-swift-frontend %s -emit-silgen | %FileCheck %s |
| |
| // rdar://14443287 |
| sil_stage raw |
| |
| import Builtin |
| import Swift |
| |
| // CHECK-LABEL: sil @_TF9optional3fooFT1fGSqFT_T___T_ : $@convention(thin) (@guaranteed Optional<@callee_guaranteed () -> @out ()>) -> () |
| sil @_TF9optional3fooFT1fGSqFT_T___T_ : $@convention(thin) (@guaranteed Optional<@callee_guaranteed () -> (@out ())>) -> () { |
| bb0(%0 : $Optional<@callee_guaranteed () -> (@out ())>): |
| %1 = alloc_box $<τ_0_0> { var τ_0_0 } <Optional<@callee_guaranteed () -> (@out ())>> |
| %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <Optional<@callee_guaranteed () -> (@out ())>>, 0 |
| store %0 to %1a : $*Optional<@callee_guaranteed () -> (@out ())> |
| %3 = alloc_stack $Optional<()> |
| %4 = alloc_stack $() |
| %5 = alloc_stack $Optional<@callee_guaranteed () -> (@out ())> |
| copy_addr %1a to [initialization] %5 : $*Optional<@callee_guaranteed () -> (@out ())> |
| // function_ref Swift._doesOptionalHaveValue <A>(v : @inout Swift.Optional<A>) -> Builtin.Int1 |
| %7 = function_ref @_TFs22_doesOptionalHaveValueU__FT1vRGSqQ___Bi1_ : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1 |
| // CHECK: apply %{{[0-9]+}}<() -> ()>(%{{[0-9]+}}) : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1 |
| %8 = apply %7<() -> ()>(%5) : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1 |
| br bb1 |
| |
| bb1: |
| destroy_addr %5 : $*Optional<@callee_guaranteed () -> (@out ())> |
| dealloc_stack %5 : $*Optional<@callee_guaranteed () -> (@out ())> |
| dealloc_stack %4 : $*() |
| br bb3 |
| |
| bb3: |
| %27 = function_ref @_TFs26_injectNothingIntoOptionalU__FT_GSqQ__ : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0> |
| // CHECK: apply %{{[0-9]+}}<()>(%{{[0-9]+}}) : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0> |
| %28 = apply %27<()>(%3) : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0> |
| br bb4 |
| |
| bb4: |
| %30 = load %3 : $*Optional<()> |
| dealloc_stack %3 : $*Optional<()> |
| release_value %1 : $<τ_0_0> { var τ_0_0 } <Optional<@callee_guaranteed () -> (@out ())>> |
| %33 = tuple () |
| return %33 : $() |
| } |
| |
| sil [transparent] @_TFs22_doesOptionalHaveValueU__FT1vRGSqQ___Bi1_ : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1 |
| sil [transparent] @_TFs26_injectNothingIntoOptionalU__FT_GSqQ__ : $@convention(thin) <τ_0_0> () -> @out Optional<τ_0_0> |