// 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 @substituted <τ_0_0> () -> @out τ_0_0 for <()>>) -> () sil @_TF9optional3fooFT1fGSqFT_T___T_ : $@convention(thin) (@guaranteed Optional<@callee_guaranteed @substituted () -> @out A for <()>>) -> () { bb0(%0 : $Optional<@callee_guaranteed @substituted () -> @out A for <()>>): %1 = alloc_box $<τ_0_0> { var τ_0_0 } () -> @out A for <()>>> %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } () -> @out A for <()>>>, 0 store %0 to %1a : $*Optional<@callee_guaranteed @substituted () -> @out A for <()>> %3 = alloc_stack $Optional<()> %4 = alloc_stack $() %5 = alloc_stack $Optional<@callee_guaranteed @substituted () -> @out A for <()>> copy_addr %1a to [init] %5 : $*Optional<@callee_guaranteed @substituted () -> @out A for <()>> // 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_guaranteed @substituted () -> @out A for <()>> dealloc_stack %5 : $*Optional<@callee_guaranteed @substituted () -> @out A for <()>> 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 } () -> @out A for <()>>> %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>