mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
158 lines
5.0 KiB
Swift
158 lines
5.0 KiB
Swift
// RUN: %target-swift-emit-silgen %s -verify | %FileCheck %s
|
|
|
|
protocol P {
|
|
var p: P { get set }
|
|
var q: P? { get set }
|
|
func p(_: P)
|
|
func q(_: P)
|
|
}
|
|
|
|
struct S : P {
|
|
var p: P
|
|
var q: P?
|
|
func p(_: P) {}
|
|
func q(_: P) {}
|
|
}
|
|
|
|
class Base : P {
|
|
var p: P
|
|
var q: P?
|
|
func p(_: P) {}
|
|
func q(_: P) {}
|
|
init(_ p: P) { self.p = p }
|
|
}
|
|
|
|
class Derived : Base {
|
|
}
|
|
|
|
func genericOverload<T>(_: T) {}
|
|
func genericOverload<T>(_: T?) {}
|
|
func genericOptional<T>(_: T?) {}
|
|
func genericNoOptional<T>(_: T) {}
|
|
|
|
// CHECK-LABEL: sil hidden @$S7ranking22propertyVersusFunctionyyAA1P_p_xtAaCRzlF
|
|
func propertyVersusFunction<T : P>(_ p: P, _ t: T) {
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
let _ = p.p
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
let _: P = p.p
|
|
// CHECK: function_ref @$S7ranking1PP1pyyAaB_pFTc
|
|
let _: (P) -> () = p.p
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
let _: P? = p.p
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
let _: Any = p.p
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
let _: Any? = p.p
|
|
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOverloadyyxlF
|
|
genericOverload(p.p)
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOverloadyyxSglF
|
|
genericOverload(p.q)
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOptionalyyxSglF
|
|
genericOptional(p.p)
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOptionalyyxSglF
|
|
genericOptional(p.q)
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking17genericNoOptionalyyxlF
|
|
genericNoOptional(p.p)
|
|
// CHECK: witness_method $@opened("{{.*}}") P, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking17genericNoOptionalyyxlF
|
|
genericNoOptional(p.q)
|
|
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
let _ = t.p
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
let _: P = t.p
|
|
// CHECK: function_ref @$S7ranking1PP1pyyAaB_pFTc
|
|
let _: (P) -> () = t.p
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
let _: P? = t.p
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
let _: Any = t.p
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
let _: Any? = t.p
|
|
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOverloadyyxlF
|
|
genericOverload(t.p)
|
|
// CHECK: witness_method $T, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOverloadyyxSglF
|
|
genericOverload(t.q)
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOptionalyyxSglF
|
|
genericOptional(t.p)
|
|
// CHECK: witness_method $T, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOptionalyyxSglF
|
|
genericOptional(t.q)
|
|
// CHECK: witness_method $T, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking17genericNoOptionalyyxlF
|
|
genericNoOptional(t.p)
|
|
// CHECK: witness_method $T, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking17genericNoOptionalyyxlF
|
|
genericNoOptional(t.q)
|
|
}
|
|
|
|
extension P {
|
|
func propertyVersusFunction() {
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
let _ = self.p
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
let _: P = self.p
|
|
// CHECK: function_ref @$S7ranking1PP1pyyAaB_pFTc
|
|
let _: (P) -> () = self.p
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
let _: P? = self.p
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
let _: Any = self.p
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
let _: Any? = self.p
|
|
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOverloadyyxlF
|
|
genericOverload(self.p)
|
|
// CHECK: witness_method $Self, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOverloadyyxSglF
|
|
genericOverload(self.q)
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOptionalyyxSglF
|
|
genericOptional(self.p)
|
|
// CHECK: witness_method $Self, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking15genericOptionalyyxSglF
|
|
genericOptional(self.q)
|
|
// CHECK: witness_method $Self, #P.p!getter.1
|
|
// CHECK: function_ref @$S7ranking17genericNoOptionalyyxlF
|
|
genericNoOptional(self.p)
|
|
// CHECK: witness_method $Self, #P.q!getter.1
|
|
// CHECK: function_ref @$S7ranking17genericNoOptionalyyxlF
|
|
genericNoOptional(self.q)
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------
|
|
|
|
func f0<T>(_ x: T) {}
|
|
|
|
// FIXME: Lookup breaks if these come after f1!
|
|
class A {
|
|
init() {}
|
|
};
|
|
class B : A {
|
|
override init() { super.init() }
|
|
}
|
|
|
|
func f1(_ a: A) -> A { return a }
|
|
func f1(_ b: B) -> B { return b }
|
|
|
|
func testDerived(b: B) {
|
|
// CHECK-LABEL: sil hidden @$S7ranking11testDerived1byAA1BC_tF
|
|
// CHECK: function_ref @$S7ranking2f1yAA1BCADF
|
|
// CHECK: function_ref @$S7ranking2f0yyxlF
|
|
f0(f1(b))
|
|
// CHECK: end sil function '$S7ranking11testDerived1byAA1BC_tF'
|
|
}
|