Files
swift-mirror/validation-test/compiler_crashers_2_fixed/sr9199.swift
Slava Pestov 6d84c18ba4 Sema: Check 'where' clause requirements on type witnesses
In the included test case, conformance checking of Wrapper : B would
pick up typealias Foo as a witness for the associated type B.Foo.

However, this typealias Foo is defined in a constrained extension where
T : A, and the underlying type references the associated type A.Foo
on T.

The resulting substitution is invalid when the conformance Wrapper : B
is used in a context where T does not conform to A.

Instead, we should ignore this typealias entirely, since it appears
in an unusable constrained extension.

Fixes <rdar://problem/60219705>, <https://bugs.swift.org/browse/SR-12327>,
<https://bugs.swift.org/browse/SR-12663>.
2020-08-15 01:43:13 -04:00

58 lines
978 B
Swift

// RUN: not %target-swift-frontend -emit-ir %s
// Just make sure we don't crash.
protocol Publicable {
associatedtype PublicModel
func publicized() -> PublicModel
}
protocol WithReturnType {
associatedtype MainType
associatedtype ReturnType
func returnTheThing()
}
extension WithReturnType where MainType: Publicable {
typealias ReturnType = MainType.PublicModel
func returnTheThing() {
print("publicable")
}
}
extension WithReturnType {
func returnTheThing() {
print("not publicable")
}
}
extension String: Publicable {
struct PublicString {
let inner: String
init(str: String) {
self.inner = "Public: \(str)"
}
}
func publicized() -> PublicString {
return PublicString(str: self)
}
}
struct Controller<T> {
}
extension Controller: WithReturnType {
typealias MainType = T
}
let controller = Controller<String>()
controller.returnTheThing()