// 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) (@owned Optional<@callee_owned (@in ()) -> @out ()>) -> () sil @_TF9optional3fooFT1fGSqFT_T___T_ : $@convention(thin) (@owned Optional<@callee_owned (@in ()) -> (@out ())>) -> () { bb0(%0 : $Optional<@callee_owned (@in ()) -> (@out ())>): %1 = alloc_box $<τ_0_0> { var τ_0_0 } (@out ())>> %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } (@out ())>>, 0 store %0 to [init] %1a : $*Optional<@callee_owned (@in ()) -> (@out ())> %3 = alloc_stack $Optional<()> %4 = alloc_stack $() %5 = alloc_stack $Optional<@callee_owned (@in ()) -> (@out ())> copy_addr %1a to [initialization] %5 : $*Optional<@callee_owned (@in ()) -> (@out ())> // function_ref Swift._doesOptionalHaveValue (v : @inout Swift.Optional) -> 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_owned (@in ()) -> (@out ())> dealloc_stack %5 : $*Optional<@callee_owned (@in ()) -> (@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 [trivial] %3 : $*Optional<()> dealloc_stack %3 : $*Optional<()> destroy_value %1 : $<τ_0_0> { var τ_0_0 } (@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>