10
10
11
11
import SwiftReflectionTest
12
12
13
+ class C { }
14
+
13
15
// Only one case has a non-zero-sized payload, so this gets
14
16
// laid out the same as a single-payload enum
15
17
enum FooVoid {
16
- case a( [ Int ] )
18
+ case a( C )
17
19
case b( Void )
18
20
}
19
21
20
- reflect ( enum: FooVoid . a ( [ ] ) )
22
+ reflect ( enum: FooVoid . a ( C ( ) ) )
21
23
22
24
// CHECK: Reflecting an enum.
23
25
// CHECK: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
@@ -27,29 +29,17 @@ reflect(enum: FooVoid.a([]))
27
29
// CHECK: Type info:
28
30
29
31
// Note: MemoryLayout<FooVoid> says that this really is size=8, alignment=8, stride=8
30
- // Explanation: [Int] is a pointer, so this enum can use NULL to represent the other case
32
+ // Explanation: C is a pointer, so this enum can use NULL to represent the other case
31
33
// Aside: In TypeLowering.cpp, enum FooVoid does not have a FixedDescriptor even though
32
34
// its not generic. This is why we check for having only a single payload first.
33
35
34
36
// CHECK-64: (multi_payload_enum size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit-1]] bitwise_takable=1
35
37
// CHECK-64: (case name=a index=0 offset=0
36
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
37
- // CHECK-64: (field name=_buffer offset=0
38
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
39
- // CHECK-64: (field name=_storage offset=0
40
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
41
- // CHECK-64: (field name=rawValue offset=0
42
- // CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1))))))))
38
+ // CHECK-64: (reference kind=strong refcounting=native))
43
39
44
40
// CHECK-32: (multi_payload_enum size=4 alignment=4 stride=4 num_extra_inhabitants=4095 bitwise_takable=1
45
41
// CHECK-32: (case name=a index=0 offset=0
46
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
47
- // CHECK-32: (field name=_buffer offset=0
48
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
49
- // CHECK-32: (field name=_storage offset=0
50
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
51
- // CHECK-32: (field name=rawValue offset=0
52
- // CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))))))
42
+ // CHECK-32: (reference kind=strong refcounting=native))
53
43
54
44
// CHECK: (case name=b index=1 offset=0
55
45
// CHECK: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))
@@ -58,10 +48,9 @@ reflect(enum: FooVoid.a([]))
58
48
// CHECK: Demangled name: reflect_Enum_MultiPayload_degenerate.FooVoid
59
49
60
50
// CHECK: Enum value:
61
- // CHECK: (enum_value name=a index=0
62
- // CHECK: (bound_generic_struct Swift.Array
63
- // CHECK: (struct Swift.Int))
64
- // CHECK: )
51
+ // CHECK-NEXT: (enum_value name=a index=0
52
+ // CHECK-NEXT: (class reflect_Enum_MultiPayload_degenerate.C)
53
+ // CHECK-NEXT: )
65
54
66
55
reflect ( enum: FooVoid . b ( ( ) ) )
67
56
@@ -72,41 +61,19 @@ reflect(enum: FooVoid.b(()))
72
61
73
62
// CHECK: Type info:
74
63
75
- // CHECK-64: (multi_payload_enum size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit-1]] bitwise_takable=1
76
- // CHECK-64: (case name=a index=0 offset=0
77
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
78
- // CHECK-64: (field name=_buffer offset=0
79
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
80
- // CHECK-64: (field name=_storage offset=0
81
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
82
- // CHECK-64: (field name=rawValue offset=0
83
- // CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1))))))))
84
-
85
- // CHECK-32: (multi_payload_enum size=4 alignment=4 stride=4 num_extra_inhabitants=4095 bitwise_takable=1
86
- // CHECK-32: (case name=a index=0 offset=0
87
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
88
- // CHECK-32: (field name=_buffer offset=0
89
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
90
- // CHECK-32: (field name=_storage offset=0
91
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
92
- // CHECK-32: (field name=rawValue offset=0
93
- // CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))))))
94
-
95
- // CHECK: (case name=b index=1 offset=0
96
- // CHECK: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))
97
64
// CHECK: Mangled name: $s36reflect_Enum_MultiPayload_degenerate7FooVoidO
98
65
// CHECK: Demangled name: reflect_Enum_MultiPayload_degenerate.FooVoid
99
66
100
67
// CHECK: Enum value:
101
- // CHECK: (enum_value name=b index=1
102
- // CHECK: (tuple)
103
- // CHECK: )
68
+ // CHECK-NEXT : (enum_value name=b index=1
69
+ // CHECK-NEXT : (tuple)
70
+ // CHECK-NEXT : )
104
71
105
72
106
73
// Same as above, except the first payload has zero size
107
74
enum FooVoid2 {
108
75
case a( Void )
109
- case b( [ Int ] )
76
+ case b( C )
110
77
}
111
78
112
79
reflect ( enum: FooVoid2 . a ( ( ) ) )
@@ -120,23 +87,11 @@ reflect(enum: FooVoid2.a(()))
120
87
121
88
// CHECK-64: (multi_payload_enum size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit-1]] bitwise_takable=1
122
89
// CHECK-64: (case name=b index=0 offset=0
123
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
124
- // CHECK-64: (field name=_buffer offset=0
125
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
126
- // CHECK-64: (field name=_storage offset=0
127
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
128
- // CHECK-64: (field name=rawValue offset=0
129
- // CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1))))))))
90
+ // CHECK-64: (reference kind=strong refcounting=native))
130
91
131
92
// CHECK-32: (multi_payload_enum size=4 alignment=4 stride=4 num_extra_inhabitants=4095 bitwise_takable=1
132
93
// CHECK-32: (case name=b index=0 offset=0
133
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
134
- // CHECK-32: (field name=_buffer offset=0
135
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
136
- // CHECK-32: (field name=_storage offset=0
137
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
138
- // CHECK-32: (field name=rawValue offset=0
139
- // CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))))))
94
+ // CHECK-32: (reference kind=strong refcounting=native))
140
95
141
96
// CHECK: (case name=a index=1 offset=0
142
97
// CHECK: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))
@@ -148,56 +103,29 @@ reflect(enum: FooVoid2.a(()))
148
103
// CHECK: (tuple)
149
104
// CHECK: )
150
105
151
- reflect ( enum: FooVoid2 . b ( [ ] ) )
106
+ reflect ( enum: FooVoid2 . b ( C ( ) ) )
152
107
153
108
// CHECK: Reflecting an enum.
154
- // CHECK: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
155
- // CHECK: Type reference:
156
- // CHECK: (enum reflect_Enum_MultiPayload_degenerate.FooVoid2)
157
109
158
110
// CHECK: Type info:
159
-
160
- // CHECK-64: (multi_payload_enum size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit-1]] bitwise_takable=1
161
- // CHECK-64: (case name=b index=0 offset=0
162
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
163
- // CHECK-64: (field name=_buffer offset=0
164
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
165
- // CHECK-64: (field name=_storage offset=0
166
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
167
- // CHECK-64: (field name=rawValue offset=0
168
- // CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1))))))))
169
-
170
- // CHECK-32: (multi_payload_enum size=4 alignment=4 stride=4 num_extra_inhabitants=4095 bitwise_takable=1
171
- // CHECK-32: (case name=b index=0 offset=0
172
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
173
- // CHECK-32: (field name=_buffer offset=0
174
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
175
- // CHECK-32: (field name=_storage offset=0
176
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
177
- // CHECK-32: (field name=rawValue offset=0
178
- // CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))))))
179
-
180
- // CHECK: (case name=a index=1 offset=0
181
- // CHECK: (tuple size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))
182
111
// CHECK: Mangled name: $s36reflect_Enum_MultiPayload_degenerate8FooVoid2O
183
112
// CHECK: Demangled name: reflect_Enum_MultiPayload_degenerate.FooVoid2
184
113
185
114
// CHECK: Enum value:
186
- // CHECK: (enum_value name=b index=0
187
- // CHECK: (bound_generic_struct Swift.Array
188
- // CHECK: (struct Swift.Int))
189
- // CHECK: )
115
+ // CHECK-NEXT: (enum_value name=b index=0
116
+ // CHECK-NEXT: (class reflect_Enum_MultiPayload_degenerate.C)
117
+ // CHECK-NEXT: )
190
118
191
119
192
120
// As above, this is laid out as a single-payload enum
193
121
// because the `b` case payload has zero size
194
122
struct B { }
195
123
enum FooEmptyStruct {
196
- case a( [ Int ] )
124
+ case a( C )
197
125
case b( B )
198
126
}
199
127
200
- reflect ( enum: FooEmptyStruct . a ( [ ] ) )
128
+ reflect ( enum: FooEmptyStruct . a ( C ( ) ) )
201
129
202
130
// CHECK: Reflecting an enum.
203
131
// CHECK: Instance pointer in child address space: 0x{{[0-9a-fA-F]+}}
@@ -208,34 +136,21 @@ reflect(enum: FooEmptyStruct.a([]))
208
136
209
137
// CHECK-64: (multi_payload_enum size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit-1]] bitwise_takable=1
210
138
// CHECK-64: (case name=a index=0 offset=0
211
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
212
- // CHECK-64: (field name=_buffer offset=0
213
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
214
- // CHECK-64: (field name=_storage offset=0
215
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
216
- // CHECK-64: (field name=rawValue offset=0
217
- // CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1))))))))
139
+ // CHECK-64: (reference kind=strong refcounting=native))
218
140
219
141
// CHECK-32: (multi_payload_enum size=4 alignment=4 stride=4 num_extra_inhabitants=4095 bitwise_takable=1
220
142
// CHECK-32: (case name=a index=0 offset=0
221
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
222
- // CHECK-32: (field name=_buffer offset=0
223
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
224
- // CHECK-32: (field name=_storage offset=0
225
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
226
- // CHECK-32: (field name=rawValue offset=0
227
- // CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))))))
143
+ // CHECK-32: (reference kind=strong refcounting=native))
228
144
229
145
// CHECK: (case name=b index=1 offset=0
230
146
// CHECK: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))
231
147
// CHECK: Mangled name: $s36reflect_Enum_MultiPayload_degenerate14FooEmptyStructO
232
148
// CHECK: Demangled name: reflect_Enum_MultiPayload_degenerate.FooEmptyStruct
233
149
234
150
// CHECK: Enum value:
235
- // CHECK: (enum_value name=a index=0
236
- // CHECK: (bound_generic_struct Swift.Array
237
- // CHECK: (struct Swift.Int))
238
- // CHECK: )
151
+ // CHECK-NEXT: (enum_value name=a index=0
152
+ // CHECK-NEXT: (class reflect_Enum_MultiPayload_degenerate.C)
153
+ // CHECK-NEXT: )
239
154
240
155
reflect ( enum: FooEmptyStruct . b ( B ( ) ) )
241
156
@@ -246,36 +161,13 @@ reflect(enum: FooEmptyStruct.b(B()))
246
161
247
162
// CHECK: Type info:
248
163
249
- // CHECK-64: (multi_payload_enum size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit-1]] bitwise_takable=1
250
- // CHECK-64: (case name=a index=0 offset=0
251
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
252
- // CHECK-64: (field name=_buffer offset=0
253
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
254
- // CHECK-64: (field name=_storage offset=0
255
- // CHECK-64: (struct size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1
256
- // CHECK-64: (field name=rawValue offset=0
257
- // CHECK-64: (builtin size=8 alignment=8 stride=8 num_extra_inhabitants=[[#num_extra_inhabitants_64bit]] bitwise_takable=1))))))))
258
-
259
- // CHECK-32: (multi_payload_enum size=4 alignment=4 stride=4 num_extra_inhabitants=4095 bitwise_takable=1
260
- // CHECK-32: (case name=a index=0 offset=0
261
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
262
- // CHECK-32: (field name=_buffer offset=0
263
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
264
- // CHECK-32: (field name=_storage offset=0
265
- // CHECK-32: (struct size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1
266
- // CHECK-32: (field name=rawValue offset=0
267
- // CHECK-32: (builtin size=4 alignment=4 stride=4 num_extra_inhabitants=4096 bitwise_takable=1))))))))
268
-
269
- // CHECK: (case name=b index=1 offset=0
270
- // CHECK: (struct size=0 alignment=1 stride=1 num_extra_inhabitants=0 bitwise_takable=1)))
271
164
// CHECK: Mangled name: $s36reflect_Enum_MultiPayload_degenerate14FooEmptyStructO
272
165
// CHECK: Demangled name: reflect_Enum_MultiPayload_degenerate.FooEmptyStruct
273
166
274
167
// CHECK: Enum value:
275
- // CHECK: (enum_value name=b index=1
276
- // CHECK: (struct reflect_Enum_MultiPayload_degenerate.B)
277
- // CHECK: )
278
-
168
+ // CHECK-NEXT: (enum_value name=b index=1
169
+ // CHECK-NEXT: (struct reflect_Enum_MultiPayload_degenerate.B)
170
+ // CHECK-NEXT: )
279
171
280
172
// TODO: Variations of Foo where `b` payload is class, Bool
281
173
0 commit comments