Skip to content

Commit 1586105

Browse files
authored
[test] Verify that TypeDecoder handles same-type constraints properly (#26045)
Follow-up for 4b8068d recommended by Slava.
1 parent 12fa06a commit 1586105

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

test/TypeDecoder/nominal_types.swift

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,64 @@ struct Constrained<T : P> {}
5151

5252
func generic<T>(_: Constrained<T>) {}
5353

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 STSContainerwhere 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+
54112
// DEMANGLE-TYPE: $s13nominal_types5OuterVD
55113
// CHECK-TYPE: Outer
56114

@@ -80,6 +138,38 @@ func generic<T>(_: Constrained<T>) {}
80138
// DEMANGLE-TYPE: $s13nominal_types11ConstrainedVyxGD
81139
// CHECK-TYPE: Constrained<τ_0_0>
82140

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>
83173

84174
// DEMANGLE-DECL: $s13nominal_types5OuterV
85175
// DEMANGLE-DECL: $s13nominal_types5OuterV5InnerO

0 commit comments

Comments
 (0)