Files
swift-mirror/test/Constraints/issue-49968.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
}
}