mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Specifically, we were preferring the always correct ownership kind specified by the FunctionType and ignoring what we parsed from the argument. This PR changes ossa to give a nice error when this is detected and fixes the places where this tests were written incorrectly.
40 lines
1.3 KiB
Plaintext
40 lines
1.3 KiB
Plaintext
// 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{{( dllexport)?}}{{( protected)?}} swiftcc void @_TF4test3barFTVS_1SVS_1X_T_()
|
|
// CHECK: call
|
|
// test.bar (test.S, test.X) -> ()
|
|
sil [ossa] @_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 {
|
|
}
|