// RUN: %target-swift-frontend %s -emit-ir // RUN: %target-swift-frontend %s -emit-ir -O // https://github.com/apple/swift/issues/45909 protocol ControllerB { associatedtype T: Controller } protocol Controller { associatedtype T func shouldSelect(_ a: T, b: S) where S.T == Self } struct ControllerAImpl {} struct ControllerImpl : Controller { typealias T = ControllerAImpl func shouldSelect(_ a: ControllerAImpl, b: S) where S.T == ControllerImpl {} } struct ControllerBImpl1 : ControllerB { typealias T = ControllerImpl } struct ControllerBImpl2 : ControllerB { typealias T = C } extension Controller { func didSelect(_ a: T, b: S) where S.T == Self { shouldSelect(a, b: b) } } ControllerImpl().didSelect(ControllerAImpl(), b: ControllerBImpl1()) ControllerImpl().didSelect(ControllerAImpl(), b: ControllerBImpl2())