|
93 | 93 | // CHECK-SAME: i32 {{3|2}},
|
94 | 94 | // CHECK-SAME: }
|
95 | 95 |
|
96 |
| -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s13generic_types1ACMi"(%swift.type_descriptor*, i8**, i8*) {{.*}} { |
97 |
| -// CHECK: [[T0:%.*]] = bitcast i8** %1 to %swift.type** |
98 |
| -// CHECK: %T = load %swift.type*, %swift.type** [[T0]], |
99 |
| -// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* %0, i8** %1, i8* %2) |
100 |
| -// CHECK-NEXT: ret %swift.type* [[METADATA]] |
101 |
| -// CHECK: } |
102 |
| - |
103 |
| -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s13generic_types1BCMi"(%swift.type_descriptor*, i8**, i8*) {{.*}} { |
104 |
| -// CHECK: [[T0:%.*]] = bitcast i8** %1 to %swift.type** |
105 |
| -// CHECK: %T = load %swift.type*, %swift.type** [[T0]], |
106 |
| -// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* %0, i8** %1, i8* %2) |
107 |
| -// CHECK-NEXT: ret %swift.type* [[METADATA]] |
108 |
| -// CHECK: } |
109 |
| - |
110 | 96 | class A<T> {
|
111 | 97 | var x = 0
|
112 | 98 |
|
@@ -149,3 +135,38 @@ func testFixed() {
|
149 | 135 | var a = F(value: ClassA()).value
|
150 | 136 | var b = F(value: ClassB()).value
|
151 | 137 | }
|
| 138 | + |
| 139 | +// Checking generic requirement encoding |
| 140 | +protocol P1 { } |
| 141 | +protocol P2 { |
| 142 | + associatedtype A |
| 143 | +} |
| 144 | + |
| 145 | +struct X1: P1 { } |
| 146 | +struct X2: P2 { |
| 147 | + typealias A = X1 |
| 148 | +} |
| 149 | + |
| 150 | +// Check for correct root generic parameters in the generic requirements of X3. |
| 151 | +// CHECK-LABEL: @"$sq_1A13generic_types2P2P_MXA" = linkonce_odr hidden constant |
| 152 | + |
| 153 | +// Root: generic parameter 1 |
| 154 | +// CHECK-SAME: i32 1 |
| 155 | + |
| 156 | +// Protocol P2 |
| 157 | +// CHECK-SAME: $s13generic_types2P2Mp |
| 158 | +struct X3<T, U> where U: P2, U.A: P1 { } |
| 159 | + |
| 160 | +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s13generic_types1ACMi"(%swift.type_descriptor*, i8**, i8*) {{.*}} { |
| 161 | +// CHECK: [[T0:%.*]] = bitcast i8** %1 to %swift.type** |
| 162 | +// CHECK: %T = load %swift.type*, %swift.type** [[T0]], |
| 163 | +// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* %0, i8** %1, i8* %2) |
| 164 | +// CHECK-NEXT: ret %swift.type* [[METADATA]] |
| 165 | +// CHECK: } |
| 166 | + |
| 167 | +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s13generic_types1BCMi"(%swift.type_descriptor*, i8**, i8*) {{.*}} { |
| 168 | +// CHECK: [[T0:%.*]] = bitcast i8** %1 to %swift.type** |
| 169 | +// CHECK: %T = load %swift.type*, %swift.type** [[T0]], |
| 170 | +// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* %0, i8** %1, i8* %2) |
| 171 | +// CHECK-NEXT: ret %swift.type* [[METADATA]] |
| 172 | +// CHECK: } |
0 commit comments