|
| 1 | + |
| 2 | +// RUN: %target-swift-emit-silgen %s | %FileCheck %s |
| 3 | + |
| 4 | +// CHECK-LABEL: sil hidden [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF : $@convention(thin) <T> (Int, @guaranteed AnyObject, @in_guaranteed Any, @in_guaranteed T) -> () |
| 5 | +func outer<T>(x: Int, y: AnyObject, z: Any, w: T) { |
| 6 | + func local1(x: Int = x) {} |
| 7 | + func local2(y: AnyObject = y) {} |
| 8 | + func local3(z: Any = z) {} |
| 9 | + func local4(w: T = w) {} |
| 10 | + func local5<U>(u: U, w: T = w) {} |
| 11 | + |
| 12 | + // CHECK: [[FN:%.*]] = function_ref @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local1L_ACySi_tlFfA_ : $@convention(thin) (Int) -> Int |
| 13 | + // CHECK: [[ARG:%.*]] = apply [[FN]](%0) : $@convention(thin) (Int) -> Int |
| 14 | + // CHECK: [[LOCAL1:%.*]] = function_ref @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local1L_ACySi_tlF : $@convention(thin) (Int, Int) -> () |
| 15 | + // CHECK: apply [[LOCAL1]]([[ARG]], %0) : $@convention(thin) (Int, Int) -> () |
| 16 | + local1() |
| 17 | + |
| 18 | + // CHECK: [[FN:%.*]] = function_ref @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local2L_ADyyXl_tlFfA_ : $@convention(thin) (@guaranteed AnyObject) -> @owned AnyObject |
| 19 | + // CHECK: [[ARG:%.*]] = apply [[FN]](%1) : $@convention(thin) (@guaranteed AnyObject) -> @owned AnyObject |
| 20 | + // CHECK: [[LOCAL2:%.*]] = function_ref @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local2L_ADyyXl_tlF : $@convention(thin) (@guaranteed AnyObject, @guaranteed AnyObject) -> () |
| 21 | + // CHECK: apply [[LOCAL2]]([[ARG]], %1) : $@convention(thin) (@guaranteed AnyObject, @guaranteed AnyObject) -> () |
| 22 | + // CHECK: destroy_value [[ARG]] : $AnyObject |
| 23 | + local2() |
| 24 | + |
| 25 | + // CHECK: [[BOX:%.*]] = alloc_box ${ var Any } |
| 26 | + // CHECK: [[BOX_ADDR:%.*]] = project_box [[BOX]] : ${ var Any }, 0 |
| 27 | + // CHECK: copy_addr %2 to [initialization] [[BOX_ADDR]] : $*Any |
| 28 | + // CHECK: [[BOX_BORROW:%.*]] = begin_borrow [[BOX]] : ${ var Any } |
| 29 | + // CHECK: [[FN:%.*]] = function_ref @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local3L_AEyyp_tlFfA_ : $@convention(thin) (@guaranteed { var Any }) -> @out Any |
| 30 | + // CHECK: [[STACK:%.*]] = alloc_stack $Any |
| 31 | + // CHECK: [[BOX2:%.*]] = alloc_box ${ var Any } |
| 32 | + // CHECK: [[BOX2_ADDR:%.*]] = project_box [[BOX2]] : ${ var Any }, 0 |
| 33 | + // CHECK: copy_addr %2 to [initialization] [[BOX2_ADDR]] : $*Any |
| 34 | + // CHECK: [[BOX2_BORROW:%.*]] = begin_borrow [[BOX2]] : ${ var Any } |
| 35 | + // CHECK: apply [[FN]]([[STACK]], [[BOX2_BORROW]]) : $@convention(thin) (@guaranteed { var Any }) -> @out Any |
| 36 | + // CHECK: end_borrow [[BOX2_BORROW]] : ${ var Any } |
| 37 | + // CHECK: destroy_value [[BOX2]] : ${ var Any } |
| 38 | + // CHECK: %30 = function_ref @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local3L_AEyyp_tlF : $@convention(thin) (@in_guaranteed Any, @guaranteed { var Any }) -> () |
| 39 | + // CHECK: apply %30([[STACK]], [[BOX_BORROW]]) : $@convention(thin) (@in_guaranteed Any, @guaranteed { var Any }) -> () |
| 40 | + // CHECK: destroy_addr [[STACK]] : $*Any |
| 41 | + // CHECK: dealloc_stack [[STACK]] : $*Any |
| 42 | + // CHECK: end_borrow [[BOX_BORROW]] : ${ var Any } |
| 43 | + // CHECK: destroy_value [[BOX]] : ${ var Any } |
| 44 | + local3() |
| 45 | + |
| 46 | + local4() |
| 47 | + |
| 48 | + local5(u: "hi") |
| 49 | +} |
| 50 | + |
| 51 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local1L_ACySi_tlFfA_ : $@convention(thin) (Int) -> Int |
| 52 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local1L_ACySi_tlF : $@convention(thin) (Int, Int) -> () |
| 53 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local2L_ADyyXl_tlFfA_ : $@convention(thin) (@guaranteed AnyObject) -> @owned AnyObject |
| 54 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local2L_ADyyXl_tlF : $@convention(thin) (@guaranteed AnyObject, @guaranteed AnyObject) -> () |
| 55 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local3L_AEyyp_tlFfA_ : $@convention(thin) (@guaranteed { var Any }) -> @out Any |
| 56 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local3L_AEyyp_tlF : $@convention(thin) (@in_guaranteed Any, @guaranteed { var Any }) -> () |
| 57 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local4L_AFyx_tlF : $@convention(thin) <T> (@in_guaranteed T, @guaranteed <τ_0_0> { var τ_0_0 } <T>) -> () |
| 58 | +// CHECK-LABEL: sil private [ossa] @$s23default_arguments_local5outer1x1y1z1wySi_yXlypxtlF6local5L_1uAFyqd___xtr__lFfA0_ : $@convention(thin) <T><U> (@guaranteed <τ_0_0> { var τ_0_0 } <T>) -> @out T |
| 59 | + |
| 60 | +class ArtClass<T> { |
| 61 | + // CHECK-LABEL: sil hidden [ossa] @$s23default_arguments_local8ArtClassC10selfMethod1uyqd___tlF : $@convention(method) <T><U> (@in_guaranteed U, @guaranteed ArtClass<T>) -> () |
| 62 | + func selfMethod<U>(u: U) { |
| 63 | + // CHECK-LABEL: sil private [ossa] @$s23default_arguments_local8ArtClassC10selfMethod1uyqd___tlF0C0L_1vAE1syqd0___qd__Sitr___lFfA1_ : $@convention(thin) <T><U><V> (@thick @dynamic_self ArtClass<T>.Type) -> Int |
| 64 | + // CHECK-LABEL: sil private [ossa] @$s23default_arguments_local8ArtClassC10selfMethod1uyqd___tlF0C0L_1vAE1syqd0___qd__Sitr___lF : $@convention(thin) <T><U><V> (@in_guaranteed V, @in_guaranteed U, Int, @thick @dynamic_self ArtClass<T>.Type) -> () |
| 65 | + func local<V>(v: V, u: U, s: Int = Self.intMethod()) {} |
| 66 | + } |
| 67 | + |
| 68 | + static func intMethod() -> Int { |
| 69 | + return 0 |
| 70 | + } |
| 71 | +} |
0 commit comments