1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
// 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 {}
}
/// https://github.com/apple/swift/issues/48550
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 {}
}
|