blob: 864f89013e58f3ff7fb1c7d36211f130060d32a2 [file] [log] [blame]
// RUN: %target-swift-frontend %s -emit-ir
// RUN: %target-swift-frontend %s -emit-ir -O
protocol ControllerB {
associatedtype T: Controller
}
protocol Controller {
associatedtype T
func shouldSelect<S: ControllerB>(_ a: T, b: S) where S.T == Self
}
struct ControllerAImpl {}
struct ControllerImpl : Controller {
typealias T = ControllerAImpl
func shouldSelect<S : ControllerB>(_ a: ControllerAImpl, b: S) where S.T == ControllerImpl {}
}
struct ControllerBImpl1 : ControllerB {
typealias T = ControllerImpl
}
struct ControllerBImpl2<C : Controller> : ControllerB {
typealias T = C
}
extension Controller {
func didSelect<S: ControllerB>(_ a: T, b: S) where S.T == Self {
shouldSelect(a, b: b)
}
}
ControllerImpl().didSelect(ControllerAImpl(), b: ControllerBImpl1())
ControllerImpl().didSelect(ControllerAImpl(), b: ControllerBImpl2<ControllerImpl>())