blob: cc1a432594adf211073b5d5b0aa59a5a13832979 [file] [log] [blame]
// 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 {
}