Skip to content

Commit 280ce22

Browse files
committed
Test reconstruction of non-generic nested types with contextual where clauses
1 parent 14d3687 commit 280ce22

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

test/TypeDecoder/generic_typealias.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ struct Outer {
2020

2121
struct GenericOuter<T> {
2222
typealias Alias<T> = Int
23+
typealias AliasWhere = Int where T == GenericOuter<Never>
2324

2425
struct Inner {
2526
typealias Alias<T> = Int
27+
typealias AliasWhere = Int where T: Equatable
2628
}
2729
}
2830

@@ -32,6 +34,7 @@ protocol Proto {
3234

3335
extension Proto {
3436
typealias OtherAlias<T> = Int
37+
typealias OtherAliasWhere = Int where Self == Conforms
3538
}
3639

3740
extension GenericOuter where T : Proto {
@@ -90,16 +93,22 @@ do {
9093
// CHECK-TYPE: Outer.Inner.Alias<String>
9194

9295
// DEMANGLE-TYPE: $s17generic_typealias12GenericOuterV5AliasaySi_SSGD
96+
// DEMANGLE-TYPE: $s17generic_typealias12GenericOuterV10AliasWhereayACys5NeverOG_GD
9397
// DEMANGLE-TYPE: $s17generic_typealias12GenericOuterV5InnerV5AliasaySi__SSGD
98+
// DEMANGLE-TYPE: $s17generic_typealias12GenericOuterV5InnerV10AliasWhereaySi__GD
9499

95100
// CHECK-TYPE: GenericOuter<Int>.Alias<String>
101+
// CHECK-TYPE: GenericOuter<GenericOuter<Never>>.AliasWhere
96102
// CHECK-TYPE: GenericOuter<Int>.Inner.Alias<String>
103+
// CHECK-TYPE: GenericOuter<Int>.Inner.AliasWhere
97104

98105
// DEMANGLE-TYPE: $s17generic_typealias5ProtoP5AliasayAA8ConformsV_SSGD
99106
// DEMANGLE-TYPE: $s17generic_typealias5ProtoPAAE10OtherAliasayAA8ConformsV_SSGD
107+
// DEMANGLE-TYPE: $s17generic_typealias5ProtoPAAE15OtherAliasWhereayAA8ConformsV_GD
100108

101109
// CHECK-TYPE: Conforms.Alias<String>
102110
// CHECK-TYPE: Conforms.OtherAlias<String>
111+
// CHECK-TYPE: Conforms.OtherAliasWhere
103112

104113
// DEMANGLE-TYPE: $s17generic_typealias5ProtoP5Aliasayx_SSGD
105114
// DEMANGLE-TYPE: $s17generic_typealias5ProtoPAAE10OtherAliasayx_SSGD
@@ -116,16 +125,22 @@ do {
116125
// DEMANGLE-DECL: $s17generic_typealias5OuterV5Aliasa
117126
// DEMANGLE-DECL: $s17generic_typealias5OuterV5InnerV5Aliasa
118127
// DEMANGLE-DECL: $s17generic_typealias12GenericOuterV5Aliasa
128+
// DEMANGLE-DECL: $s17generic_typealias12GenericOuterV10AliasWherea
119129
// DEMANGLE-DECL: $s17generic_typealias12GenericOuterV5InnerV5Aliasa
130+
// DEMANGLE-DECL: $s17generic_typealias12GenericOuterV5InnerV10AliasWherea
120131
// DEMANGLE-DECL: $s17generic_typealias5ProtoP5Aliasa
121132
// DEMANGLE-DECL: $s17generic_typealias5ProtoPAAE10OtherAliasa
133+
// DEMANGLE-DECL: $s17generic_typealias5ProtoPAAE15OtherAliasWherea
122134
// DEMANGLE-DECL: $s17generic_typealias12GenericOuterVA2A5ProtoRzlE16ConditionalAliasa
123135

124136
// CHECK-DECL: generic_typealias.(file).Alias
125137
// CHECK-DECL: generic_typealias.(file).Outer.Alias
126138
// CHECK-DECL: generic_typealias.(file).Outer.Inner.Alias
127139
// CHECK-DECL: generic_typealias.(file).GenericOuter.Alias
140+
// CHECK-DECL: generic_typealias.(file).GenericOuter.AliasWhere
128141
// CHECK-DECL: generic_typealias.(file).GenericOuter.Inner.Alias
142+
// CHECK-DECL: generic_typealias.(file).GenericOuter.Inner.AliasWhere
129143
// CHECK-DECL: generic_typealias.(file).Proto.Alias
130144
// CHECK-DECL: generic_typealias.(file).Proto extension.OtherAlias
145+
// CHECK-DECL: generic_typealias.(file).Proto extension.OtherAliasWhere
131146
// CHECK-DECL: generic_typealias.(file).GenericOuter extension.ConditionalAlias

test/TypeDecoder/nominal_types.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ enum GenericOuter<T, U> {
2525

2626
struct Inner {}
2727
struct GenericInner<T, U> {}
28+
struct InnerWhere where T == GenericOuter<U, U> {}
2829
}
2930

3031
func blackHole(_: Any...) {}
@@ -59,6 +60,7 @@ enum STSContainer<T : STSTagProtocol> {
5960
class Superclass {}
6061
class Subclass<U>: Superclass where T == STSOuter {
6162
class ExtraNested: Superclass {}
63+
class ExtraNestedWhere: Superclass where U: Subclass<T> {}
6264
}
6365

6466
class GenericSuperclass<U> {}
@@ -122,13 +124,17 @@ extension STSContainer℠ where T == STSOuter {
122124

123125
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterO5InnerVyxq__GD
124126
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterO0C5InnerVyxq__qd__qd_0_GD
127+
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterO10InnerWhereVyACyq_q_Gq__GD
125128
// CHECK-TYPE: GenericOuter<τ_0_0, τ_0_1>.Inner
126129
// CHECK-TYPE: GenericOuter<τ_0_0, τ_0_1>.GenericInner<τ_1_0, τ_1_1>
130+
// CHECK-TYPE: GenericOuter<GenericOuter<τ_0_1, τ_0_1>, τ_0_1>.InnerWhere
127131

128132
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterO5InnerVySiSS_GD
129133
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterO0C5InnerVySiSS_SfSdGD
134+
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterO10InnerWhereVyACyS2bGSb_GD
130135
// CHECK-TYPE: GenericOuter<Int, String>.Inner
131136
// CHECK-TYPE: GenericOuter<Int, String>.GenericInner<Float, Double>
137+
// CHECK-TYPE: GenericOuter<GenericOuter<Bool, Bool>, Bool>.InnerWhere
132138

133139
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterOyxq_GD
134140
// DEMANGLE-TYPE: $s13nominal_types12GenericOuterOySiSSGD
@@ -153,6 +159,8 @@ extension STSContainer℠ where T == STSOuter {
153159

154160
// DEMANGLE-TYPE: $s13nominal_types12STSContainerO8SubclassC11ExtraNestedCyAA8STSOuterV_Si_G
155161
// CHECK-TYPE: STSContainer<STSOuter>.Subclass<Int>.ExtraNested
162+
// DEMANGLE-TYPE: $s13nominal_types12STSContainerO8SubclassC16ExtraNestedWhereCyAA8STSOuterV_AEyAI_AIG_G
163+
// CHECK-TYPE: STSContainer<STSOuter>.Subclass<STSContainer<STSOuter>.Subclass<STSOuter>>.ExtraNestedWhere
156164
// DEMANGLE-TYPE: $s13nominal_types0017STSContainer_swCgOA2A8STSOuterVRszrlE8SubclassC11ExtraNestedCyAE_Si_G
157165
// CHECK-TYPE: STSContainer℠<STSOuter>.Subclass<Int>.ExtraNested
158166

@@ -177,6 +185,7 @@ extension STSContainer℠ where T == STSOuter {
177185
// DEMANGLE-DECL: $s13nominal_types12GenericOuterO
178186
// DEMANGLE-DECL: $s13nominal_types12GenericOuterO5InnerV
179187
// DEMANGLE-DECL: $s13nominal_types12GenericOuterO0C5InnerV
188+
// DEMANGLE-DECL: $s13nominal_types12GenericOuterO10InnerWhereV
180189
// DEMANGLE-DECL: $s13nominal_types1PP
181190
// DEMANGLE-DECL: $s13nominal_types11ConstrainedV
182191

@@ -186,5 +195,6 @@ extension STSContainer℠ where T == STSOuter {
186195
// CHECK-DECL: nominal_types.(file).GenericOuter
187196
// CHECK-DECL: nominal_types.(file).GenericOuter.Inner
188197
// CHECK-DECL: nominal_types.(file).GenericOuter.GenericInner
198+
// CHECK-DECL: nominal_types.(file).GenericOuter.InnerWhere
189199
// CHECK-DECL: nominal_types.(file).P
190200
// CHECK-DECL: nominal_types.(file).Constrained

0 commit comments

Comments
 (0)