blob: 21b59a843ff98b1e5874a068dac8fe835ff1dfae [file] [log] [blame]
// RUN: %target-swift-frontend -emit-ir %s
public protocol HorseSaddle {}
public enum EnglishSaddle : HorseSaddle {}
public enum WesternSaddle<A, B> : HorseSaddle {}
public protocol Horse {
associatedtype Body : Horse
associatedtype Saddle: HorseSaddle
var body: Body { get }
}
extension Horse {
typealias Saddle = Body.Saddle
}
public struct DraftHorse<T> : Pony {
public typealias Saddle = EnglishSaddle
public typealias Body = Never
var contents: T
}
// MARK: - Implementation detail
extension Never : Horse {
public typealias Saddle = EnglishSaddle
public typealias Body = Never
public var body: Never {
switch self {}
}
}
protocol Pony : Horse where Body == Never {}
extension Pony {
public var body: Never { fatalError() }
}