mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
82 lines
1.5 KiB
Swift
82 lines
1.5 KiB
Swift
// RUN: %target-typecheck-verify-swift -swift-version 4
|
|
|
|
// https://github.com/apple/swift/issues/49968
|
|
|
|
protocol X {
|
|
var foo: Int { get }
|
|
var bar: Int { get }
|
|
}
|
|
|
|
class Y {
|
|
var foo: Int = 0
|
|
}
|
|
extension Y {
|
|
var bar: Int { return foo }
|
|
}
|
|
|
|
protocol Z : Y {
|
|
var foo: Int { get }
|
|
var bar: Int { get }
|
|
}
|
|
|
|
class GenericClass<T> {
|
|
var foo: T
|
|
init(_ foo: T) { self.foo = foo }
|
|
}
|
|
extension GenericClass {
|
|
var bar: T { return foo }
|
|
}
|
|
|
|
// Make sure we keep all of the following cases unambiguous to retain source compatibility with Swift 4.1.
|
|
|
|
func testGenericPropertyProtocolClass<T : X & Y>(_ t: T) {
|
|
_ = t.foo
|
|
_ = t.bar
|
|
}
|
|
|
|
func testExistentialPropertyProtocolClass(_ t: X & Y) {
|
|
_ = t.foo
|
|
_ = t.bar
|
|
}
|
|
|
|
func testGenericPropertySubclassConstrainedProtocol<T : Z>(_ t: T) {
|
|
_ = t.foo
|
|
_ = t.bar
|
|
}
|
|
|
|
func testExistentialPropertySubclassConstrainedProtocol(_ t: Z) {
|
|
_ = t.foo
|
|
_ = t.bar
|
|
}
|
|
|
|
func testExistentialPropertyProtocolGenericClass(_ t: GenericClass<Int> & X) {
|
|
_ = t.foo
|
|
_ = t.bar
|
|
}
|
|
|
|
func testExistentialPropertyProtocolGenericClass(_ t: GenericClass<String> & X) {
|
|
_ = t.foo
|
|
_ = t.bar
|
|
}
|
|
|
|
extension X where Self : Y {
|
|
func testGenericPropertyProtocolClass(_ x: Self) {
|
|
_ = self.foo
|
|
_ = self.bar
|
|
}
|
|
}
|
|
|
|
extension X where Self : GenericClass<Int> {
|
|
func testGenericPropertyProtocolGenericClass(_ x: Self) {
|
|
_ = self.foo
|
|
_ = self.bar
|
|
}
|
|
}
|
|
|
|
extension X where Self : GenericClass<String> {
|
|
func testGenericPropertyProtocolGenericClass(_ x: Self) {
|
|
_ = self.foo
|
|
_ = self.bar
|
|
}
|
|
}
|