| // RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s |
| // radar://16375832 |
| sil_stage raw |
| |
| import Builtin |
| import Swift |
| |
| protocol P { |
| } |
| |
| struct X : P { |
| } |
| |
| struct S { |
| func foo<T : P>(t: T) |
| } |
| |
| // test.S.foo (test.S)<A : test.P>(A) -> () |
| sil @_TFV4test1S3foofS0_US_1P__FQ_T_ : $@convention(method) <T where T : P> (@in T, S) -> () |
| |
| // CHECK-LABEL: define{{( protected)?}} swiftcc void @_TF4test3barFTVS_1SVS_1X_T_() |
| // CHECK: call |
| // test.bar (test.S, test.X) -> () |
| sil @_TF4test3barFTVS_1SVS_1X_T_ : $@convention(thin) (S, X) -> () { |
| bb0(%0 : $S, %1 : $X): |
| debug_value %0 : $S // let s // id: %2 |
| debug_value %1 : $X // let x // id: %3 |
| // function_ref test.S.foo (test.S)<A : test.P>(A) -> () |
| %4 = function_ref @_TFV4test1S3foofS0_US_1P__FQ_T_ : $@convention(method) <τ_0_0 where τ_0_0 : P> (@in τ_0_0, S) -> () // user: %7 |
| %5 = alloc_stack $X // users: %6, %7, %8 |
| store %1 to [trivial] %5 : $*X // id: %6 |
| %7 = apply %4<X>(%5, %0) : $@convention(method) <τ_0_0 where τ_0_0 : P> (@in τ_0_0, S) -> () |
| dealloc_stack %5 : $*X // id: %8 |
| %9 = tuple () // user: %10 |
| return %9 : $() // id: %10 |
| } |
| |
| sil_witness_table X: P module test { |
| } |