blob: f08b3e44f868e3bf61e67809101c4761f31c46b7 [file] [log] [blame]
// RUN: %target-typecheck-verify-swift
/// First try different permutations.
struct Outer1 { }
extension Outer1.Inner.Inner { }
extension Outer1.Inner {
struct Inner { }
}
extension Outer1 {
struct Inner { }
}
///
struct Outer1A { }
extension Outer1A.Inner {
struct Inner { }
}
extension Outer1A.Inner.Inner { }
extension Outer1A {
struct Inner { }
}
///
struct Outer1B { }
extension Outer1B.Inner {
struct Inner { }
}
extension Outer1B {
struct Inner { }
}
extension Outer1B.Inner.Inner { }
///
struct Outer1C { }
extension Outer1C {
struct Inner { }
}
extension Outer1C.Inner {
struct Inner { }
}
extension Outer1C.Inner.Inner { }
///
struct Outer1D { }
extension Outer1D {
struct Inner { }
}
extension Outer1D.Inner.Inner { }
extension Outer1D.Inner {
struct Inner { }
}
/// Now try some generics.
struct Outer2 { }
extension Outer2.Inner.Inner { }
extension Outer2.Inner {
struct Inner { }
}
extension Outer2 {
struct Inner<T> { }
}
///
struct Outer3<T> { }
extension Outer3.Inner { }
extension Outer3 {
struct Inner<U> { }
}
/// Extending a typealias inside an extension.
struct Outer4 { }
extension Outer4.Inner { }
struct Outer4Inner { }
extension Outer4 {
typealias Inner = Outer4Inner
}
/// Subclassing.
enum Outer5 {}
enum OtherOuter5 {}
extension Outer5.Inner {}
extension Outer5 {
class Inner : OtherOuter5.Super {}
}
extension OtherOuter5 {
class Super {}
}
/// SR-5993
enum Outer5A {}
enum OtherOuter5A {}
extension Outer5A {
class Inner : OtherOuter5A.Super {}
}
extension Outer5A.Inner {}
extension OtherOuter5A {
class Super {}
}
///
enum Outer5B {}
enum OtherOuter5B {}
extension Outer5B {
class Inner : OtherOuter5B.Super {}
}
extension OtherOuter5B {
class Super {}
}
extension Outer5B.Inner {}
///
enum Outer5C {}
enum OtherOuter5C {}
extension OtherOuter5C {
class Super {}
}
extension Outer5C {
class Inner : OtherOuter5C.Super {}
}
extension Outer5C.Inner {}
///
enum Outer5D {}
enum OtherOuter5D {}
extension OtherOuter5D {
class Super {}
}
extension Outer5D.Inner {}
extension Outer5D {
class Inner : OtherOuter5D.Super {}
}