@@ -51,6 +51,64 @@ struct Constrained<T : P> {}
51
51
52
52
func generic< T> ( _: Constrained < T > ) { }
53
53
54
+
55
+ protocol STSTagProtocol { }
56
+ struct STSOuter : STSTagProtocol { }
57
+
58
+ enum STSContainer < T : STSTagProtocol > {
59
+ class Superclass { }
60
+ class Subclass < U> : Superclass where T == STSOuter {
61
+ class ExtraNested : Superclass { }
62
+ }
63
+
64
+ class GenericSuperclass < U> { }
65
+ class Subclass2 < U> : GenericSuperclass < U > where T == STSOuter { }
66
+
67
+ class Subclass3 < U: Collection > : Superclass where T == U . Element { }
68
+
69
+ class MoreNesting < X> {
70
+ class Subclass < U> : Superclass where T == STSOuter { }
71
+ }
72
+
73
+ struct Fields < U> where T == STSOuter {
74
+ var x : T ?
75
+ var y : U ?
76
+ }
77
+
78
+ enum Cases < U> where T == STSOuter {
79
+ case a( T )
80
+ case b( U )
81
+ }
82
+ }
83
+
84
+ // A new type with an easily-recognizable, easily-strippable suffix character.
85
+ enum STSContainer ℠< T : STSTagProtocol > {
86
+ class Superclass { }
87
+ class GenericSuperclass < U> { }
88
+ }
89
+ extension STSContainer ℠ where T == STSOuter {
90
+ class Subclass < U> : Superclass {
91
+ class ExtraNested : Superclass { }
92
+ }
93
+
94
+ class Subclass2 < U> : GenericSuperclass < U > { }
95
+
96
+ class MoreNesting < X> {
97
+ class Subclass < U> : Superclass { }
98
+ }
99
+
100
+ struct Fields < U> {
101
+ var x : T ?
102
+ var y : U ?
103
+ }
104
+
105
+ enum Cases < U> {
106
+ case a( T )
107
+ case b( U )
108
+ }
109
+ }
110
+
111
+
54
112
// DEMANGLE-TYPE: $s13nominal_types5OuterVD
55
113
// CHECK-TYPE: Outer
56
114
@@ -80,6 +138,38 @@ func generic<T>(_: Constrained<T>) {}
80
138
// DEMANGLE-TYPE: $s13nominal_types11ConstrainedVyxGD
81
139
// CHECK-TYPE: Constrained<τ_0_0>
82
140
141
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO8SubclassCyAA8STSOuterV_SiG
142
+ // CHECK-TYPE: STSContainer<STSOuter>.Subclass<Int>
143
+ // DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE8SubclassCyAE_SiG
144
+ // CHECK-TYPE: STSContainer℠<STSOuter>.Subclass<Int>
145
+
146
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO9Subclass2CyAA8STSOuterV_SiG
147
+ // CHECK-TYPE: STSContainer<STSOuter>.Subclass2<Int>
148
+ // DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE9Subclass2CyAE_SiG
149
+ // CHECK-TYPE: STSContainer℠<STSOuter>.Subclass2<Int>
150
+
151
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO9Subclass3CyAA8STSOuterV_SayAGGG
152
+ // CHECK-TYPE: STSContainer<STSOuter>.Subclass3<Array<STSOuter>>
153
+
154
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO8SubclassC11ExtraNestedCyAA8STSOuterV_Si_G
155
+ // CHECK-TYPE: STSContainer<STSOuter>.Subclass<Int>.ExtraNested
156
+ // DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE8SubclassC11ExtraNestedCyAE_Si_G
157
+ // CHECK-TYPE: STSContainer℠<STSOuter>.Subclass<Int>.ExtraNested
158
+
159
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO11MoreNestingC8SubclassCyAA8STSOuterV_Sb_SiG
160
+ // CHECK-TYPE: STSContainer<STSOuter>.MoreNesting<Bool>.Subclass<Int>
161
+ // DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE11MoreNestingC8SubclassCyAE_Sb_SiG
162
+ // CHECK-TYPE: STSContainer℠<STSOuter>.MoreNesting<Bool>.Subclass<Int>
163
+
164
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO6FieldsVyAA8STSOuterV_SiG
165
+ // CHECK-TYPE: STSContainer<STSOuter>.Fields<Int>
166
+ // DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE6FieldsVyAE_SiG
167
+ // CHECK-TYPE: STSContainer℠<STSOuter>.Fields<Int>
168
+
169
+ // DEMANGLE-TYPE: $s13nominal_types12STSContainerO5CasesOyAA8STSOuterV_SiG
170
+ // CHECK-TYPE: STSContainer<STSOuter>.Cases<Int>
171
+ // DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE5CasesOyAE_SiG
172
+ // CHECK-TYPE: STSContainer℠<STSOuter>.Cases<Int>
83
173
84
174
// DEMANGLE-DECL: $s13nominal_types5OuterV
85
175
// DEMANGLE-DECL: $s13nominal_types5OuterV5InnerO
0 commit comments