// RUN: %target-swift-frontend -emit-ir -O %s // https://github.com/apple/swift/issues/54758 protocol A { associatedtype Foo // Does not crash if renamed } protocol B { associatedtype Foo // Does not crash if renamed var aFoo: Foo { get } } public struct Wrapper { let wrapped: T } // Removing this extension or combining it with the next one prevents the crash extension Wrapper: A where T: A { typealias Foo = Wrapper } extension Wrapper: B where T: B { var aFoo: Wrapper { return .init(wrapped: wrapped.aFoo) } } public struct Model: B { public struct Foo {} public var aFoo: Foo { return Foo() } } // Attempting to specialize this method for Wrapper crashes the compiler func fooString(body: Body) -> String { return "\(body.aFoo)" } public func foo(_ command: Wrapper) -> String { return fooString(body: command) }