mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Use a syntax that declares the layout's generic parameters and fields,
followed by the generic arguments to apply to the layout:
{ var Int, let String } // A concrete box layout with a mutable Int
// and immutable String field
<T, U> { var T, let U } <Int, String> // A generic box layout,
// applied to Int and String
// arguments
52 lines
3.8 KiB
Plaintext
52 lines
3.8 KiB
Plaintext
// RUN: %target-swift-frontend %s -emit-silgen | %FileCheck %s
|
|
|
|
// rdar://14443287
|
|
sil_stage raw
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
// CHECK-LABEL: sil @_TF4test3fooFT1fGSqFT_T___T_ : $@convention(thin) (@owned Optional<@callee_owned (@in ()) -> @out ()>) -> ()
|
|
sil @_TF4test3fooFT1fGSqFT_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 } <Optional<@callee_owned (@in ()) -> @out ()>> // var f // users: %2, %6, %32
|
|
%1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <Optional<@callee_owned (@in ()) -> @out ()>>, 0
|
|
store %0 to [init] %1a : $*Optional<@callee_owned (@in ()) -> @out ()> // id: %2
|
|
%3 = alloc_stack $Optional<()> // users: %22, %28, %30, %31
|
|
%4 = alloc_stack $() // users: %12, %22, %25
|
|
%5 = alloc_stack $Optional<@callee_owned (@in ()) -> @out ()> // users: %6, %8, %10, %11, %16, %24
|
|
copy_addr %1a to [initialization] %5 : $*Optional<@callee_owned (@in ()) -> @out ()> // id: %6
|
|
%7 = function_ref @_TFs22_doesOptionalHaveValueU__FT1vRGSqQ___Bi1_ : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1 // user: %8
|
|
%8 = apply %7<() -> ()>(%5) : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1 // user: %9
|
|
br bb2 // id: %13
|
|
|
|
bb2: // Preds: bb0
|
|
%14 = function_ref @_TFs17_getOptionalValueU__FT1vGSqQ___Q_ : $@convention(thin) <τ_0_0> (@in Optional<τ_0_0>) -> @out τ_0_0 // user: %16
|
|
%15 = alloc_stack $@callee_owned (@in ()) -> @out () // users: %16, %17, %23
|
|
// CHECK: apply %{{[0-9]+}}<() -> ()>(%{{[0-9]+}}, %{{[0-9]+}}) : $@convention(thin) <τ_0_0> (@in Optional<τ_0_0>) -> @out τ_0_0
|
|
%16 = apply %14<() -> ()>(%15, %5) : $@convention(thin) <τ_0_0> (@in Optional<τ_0_0>) -> @out τ_0_0
|
|
%17 = load [take] %15 : $*@callee_owned (@in ()) -> @out () // user: %19
|
|
%18 = function_ref @_TTRXFo_iT__iT__XFo__dT__ : $@convention(thin) (@owned @callee_owned (@in ()) -> @out ()) -> () // user: %19
|
|
%19 = partial_apply %18(%17) : $@convention(thin) (@owned @callee_owned (@in ()) -> @out ()) -> () // user: %20
|
|
%20 = apply %19() : $@callee_owned () -> ()
|
|
%21 = function_ref @_TFs24_injectValueIntoOptionalU__FT1vQ__GSqQ__ : $@convention(thin) <τ_0_0> (@in τ_0_0) -> @out Optional<τ_0_0> // user: %22
|
|
// CHECK: apply %{{[0-9]+}}<()>(%{{[0-9]+}}, %{{[0-9]+}}) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> @out Optional<τ_0_0>
|
|
%22 = apply %21<()>(%3, %4) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> @out Optional<τ_0_0>
|
|
dealloc_stack %15 : $*@callee_owned (@in ()) -> @out () // id: %23
|
|
dealloc_stack %5 : $*Optional<@callee_owned (@in ()) -> @out ()> // id: %24
|
|
dealloc_stack %4 : $*() // id: %25
|
|
br bb4 // id: %26
|
|
|
|
bb4: // Preds: bb2 bb3
|
|
%30 = load [trivial] %3 : $*Optional<()>
|
|
dealloc_stack %3 : $*Optional<()> // id: %31
|
|
destroy_value %1 : $<τ_0_0> { var τ_0_0 } <Optional<@callee_owned (@in ()) -> @out ()>>
|
|
%33 = tuple () // user: %34
|
|
return %33 : $() // id: %34
|
|
}
|
|
|
|
sil [transparent] @_TFs22_doesOptionalHaveValueU__FT1vRGSqQ___Bi1_ : $@convention(thin) <τ_0_0> (@inout Optional<τ_0_0>) -> Builtin.Int1
|
|
sil [transparent] @_TFs17_getOptionalValueU__FT1vGSqQ___Q_ : $@convention(thin) <τ_0_0> (@in Optional<τ_0_0>) -> @out τ_0_0
|
|
sil [transparent] @_TTRXFo_iT__iT__XFo__dT__ : $@convention(thin) (@owned @callee_owned (@in ()) -> @out ()) -> ()
|
|
sil [transparent] @_TFs24_injectValueIntoOptionalU__FT1vQ__GSqQ__ : $@convention(thin) <τ_0_0> (@in τ_0_0) -> @out Optional<τ_0_0>
|