bug: nesting pattern types in enums doesn't use layout optimizations · flip1995/rust@2db07f9 (original) (raw)
``
1
`+
error: layout_of(NonZeroU32) = Layout {
`
``
2
`+
size: Size(4 bytes),
`
``
3
`+
align: AbiAndPrefAlign {
`
``
4
`+
abi: Align(4 bytes),
`
``
5
`+
pref: Align(8 bytes),
`
``
6
`+
},
`
``
7
`+
abi: Scalar(
`
``
8
`+
Initialized {
`
``
9
`+
value: Int(
`
``
10
`+
I32,
`
``
11
`+
false,
`
``
12
`+
),
`
``
13
`+
valid_range: 1..=4294967295,
`
``
14
`+
},
`
``
15
`+
),
`
``
16
`+
fields: Arbitrary {
`
``
17
`+
offsets: [
`
``
18
`+
Size(0 bytes),
`
``
19
`+
],
`
``
20
`+
memory_index: [
`
``
21
`+
0,
`
``
22
`+
],
`
``
23
`+
},
`
``
24
`+
largest_niche: Some(
`
``
25
`+
Niche {
`
``
26
`+
offset: Size(0 bytes),
`
``
27
`+
value: Int(
`
``
28
`+
I32,
`
``
29
`+
false,
`
``
30
`+
),
`
``
31
`+
valid_range: 1..=4294967295,
`
``
32
`+
},
`
``
33
`+
),
`
``
34
`+
variants: Single {
`
``
35
`+
index: 0,
`
``
36
`+
},
`
``
37
`+
max_repr_align: None,
`
``
38
`+
unadjusted_abi_align: Align(4 bytes),
`
``
39
`+
}
`
``
40
`+
--> $DIR/range_patterns.rs:9:1
`
``
41
`+
|
`
``
42
`+
LL | type X = std::num::NonZeroU32;
`
``
43
`+
| ^^^^^^
`
``
44
+
``
45
`+
error: layout_of((u32) is 1..=) = Layout {
`
``
46
`+
size: Size(4 bytes),
`
``
47
`+
align: AbiAndPrefAlign {
`
``
48
`+
abi: Align(4 bytes),
`
``
49
`+
pref: Align(4 bytes),
`
``
50
`+
},
`
``
51
`+
abi: Scalar(
`
``
52
`+
Initialized {
`
``
53
`+
value: Int(
`
``
54
`+
I32,
`
``
55
`+
false,
`
``
56
`+
),
`
``
57
`+
valid_range: 1..=4294967295,
`
``
58
`+
},
`
``
59
`+
),
`
``
60
`+
fields: Primitive,
`
``
61
`+
largest_niche: None,
`
``
62
`+
variants: Single {
`
``
63
`+
index: 0,
`
``
64
`+
},
`
``
65
`+
max_repr_align: None,
`
``
66
`+
unadjusted_abi_align: Align(4 bytes),
`
``
67
`+
}
`
``
68
`+
--> $DIR/range_patterns.rs:11:1
`
``
69
`+
|
`
``
70
`+
LL | type Y = pattern_type!(u32 is 1..);
`
``
71
`+
| ^^^^^^
`
``
72
+
``
73
`+
error: layout_of(Option<(u32) is 1..=>) = Layout {
`
``
74
`+
size: Size(8 bytes),
`
``
75
`+
align: AbiAndPrefAlign {
`
``
76
`+
abi: Align(4 bytes),
`
``
77
`+
pref: Align(8 bytes),
`
``
78
`+
},
`
``
79
`+
abi: ScalarPair(
`
``
80
`+
Initialized {
`
``
81
`+
value: Int(
`
``
82
`+
I32,
`
``
83
`+
false,
`
``
84
`+
),
`
``
85
`+
valid_range: 0..=1,
`
``
86
`+
},
`
``
87
`+
Union {
`
``
88
`+
value: Int(
`
``
89
`+
I32,
`
``
90
`+
false,
`
``
91
`+
),
`
``
92
`+
},
`
``
93
`+
),
`
``
94
`+
fields: Arbitrary {
`
``
95
`+
offsets: [
`
``
96
`+
Size(0 bytes),
`
``
97
`+
],
`
``
98
`+
memory_index: [
`
``
99
`+
0,
`
``
100
`+
],
`
``
101
`+
},
`
``
102
`+
largest_niche: Some(
`
``
103
`+
Niche {
`
``
104
`+
offset: Size(0 bytes),
`
``
105
`+
value: Int(
`
``
106
`+
I32,
`
``
107
`+
false,
`
``
108
`+
),
`
``
109
`+
valid_range: 0..=1,
`
``
110
`+
},
`
``
111
`+
),
`
``
112
`+
variants: Multiple {
`
``
113
`+
tag: Initialized {
`
``
114
`+
value: Int(
`
``
115
`+
I32,
`
``
116
`+
false,
`
``
117
`+
),
`
``
118
`+
valid_range: 0..=1,
`
``
119
`+
},
`
``
120
`+
tag_encoding: Direct,
`
``
121
`+
tag_field: 0,
`
``
122
`+
variants: [
`
``
123
`+
Layout {
`
``
124
`+
size: Size(4 bytes),
`
``
125
`+
align: AbiAndPrefAlign {
`
``
126
`+
abi: Align(1 bytes),
`
``
127
`+
pref: Align(8 bytes),
`
``
128
`+
},
`
``
129
`+
abi: Aggregate {
`
``
130
`+
sized: true,
`
``
131
`+
},
`
``
132
`+
fields: Arbitrary {
`
``
133
`+
offsets: [],
`
``
134
`+
memory_index: [],
`
``
135
`+
},
`
``
136
`+
largest_niche: None,
`
``
137
`+
variants: Single {
`
``
138
`+
index: 0,
`
``
139
`+
},
`
``
140
`+
max_repr_align: None,
`
``
141
`+
unadjusted_abi_align: Align(1 bytes),
`
``
142
`+
},
`
``
143
`+
Layout {
`
``
144
`+
size: Size(8 bytes),
`
``
145
`+
align: AbiAndPrefAlign {
`
``
146
`+
abi: Align(4 bytes),
`
``
147
`+
pref: Align(8 bytes),
`
``
148
`+
},
`
``
149
`+
abi: ScalarPair(
`
``
150
`+
Initialized {
`
``
151
`+
value: Int(
`
``
152
`+
I32,
`
``
153
`+
false,
`
``
154
`+
),
`
``
155
`+
valid_range: 0..=1,
`
``
156
`+
},
`
``
157
`+
Union {
`
``
158
`+
value: Int(
`
``
159
`+
I32,
`
``
160
`+
false,
`
``
161
`+
),
`
``
162
`+
},
`
``
163
`+
),
`
``
164
`+
fields: Arbitrary {
`
``
165
`+
offsets: [
`
``
166
`+
Size(4 bytes),
`
``
167
`+
],
`
``
168
`+
memory_index: [
`
``
169
`+
0,
`
``
170
`+
],
`
``
171
`+
},
`
``
172
`+
largest_niche: None,
`
``
173
`+
variants: Single {
`
``
174
`+
index: 1,
`
``
175
`+
},
`
``
176
`+
max_repr_align: None,
`
``
177
`+
unadjusted_abi_align: Align(4 bytes),
`
``
178
`+
},
`
``
179
`+
],
`
``
180
`+
},
`
``
181
`+
max_repr_align: None,
`
``
182
`+
unadjusted_abi_align: Align(4 bytes),
`
``
183
`+
}
`
``
184
`+
--> $DIR/range_patterns.rs:13:1
`
``
185
`+
|
`
``
186
`+
LL | type Z = Option<pattern_type!(u32 is 1..)>;
`
``
187
`+
| ^^^^^^
`
``
188
+
``
189
`+
error: layout_of(Option) = Layout {
`
``
190
`+
size: Size(4 bytes),
`
``
191
`+
align: AbiAndPrefAlign {
`
``
192
`+
abi: Align(4 bytes),
`
``
193
`+
pref: Align(8 bytes),
`
``
194
`+
},
`
``
195
`+
abi: Scalar(
`
``
196
`+
Initialized {
`
``
197
`+
value: Int(
`
``
198
`+
I32,
`
``
199
`+
false,
`
``
200
`+
),
`
``
201
`+
valid_range: (..=0) | (1..),
`
``
202
`+
},
`
``
203
`+
),
`
``
204
`+
fields: Arbitrary {
`
``
205
`+
offsets: [
`
``
206
`+
Size(0 bytes),
`
``
207
`+
],
`
``
208
`+
memory_index: [
`
``
209
`+
0,
`
``
210
`+
],
`
``
211
`+
},
`
``
212
`+
largest_niche: None,
`
``
213
`+
variants: Multiple {
`
``
214
`+
tag: Initialized {
`
``
215
`+
value: Int(
`
``
216
`+
I32,
`
``
217
`+
false,
`
``
218
`+
),
`
``
219
`+
valid_range: (..=0) | (1..),
`
``
220
`+
},
`
``
221
`+
tag_encoding: Niche {
`
``
222
`+
untagged_variant: 1,
`
``
223
`+
niche_variants: 0..=0,
`
``
224
`+
niche_start: 0,
`
``
225
`+
},
`
``
226
`+
tag_field: 0,
`
``
227
`+
variants: [
`
``
228
`+
Layout {
`
``
229
`+
size: Size(0 bytes),
`
``
230
`+
align: AbiAndPrefAlign {
`
``
231
`+
abi: Align(1 bytes),
`
``
232
`+
pref: Align(8 bytes),
`
``
233
`+
},
`
``
234
`+
abi: Aggregate {
`
``
235
`+
sized: true,
`
``
236
`+
},
`
``
237
`+
fields: Arbitrary {
`
``
238
`+
offsets: [],
`
``
239
`+
memory_index: [],
`
``
240
`+
},
`
``
241
`+
largest_niche: None,
`
``
242
`+
variants: Single {
`
``
243
`+
index: 0,
`
``
244
`+
},
`
``
245
`+
max_repr_align: None,
`
``
246
`+
unadjusted_abi_align: Align(1 bytes),
`
``
247
`+
},
`
``
248
`+
Layout {
`
``
249
`+
size: Size(4 bytes),
`
``
250
`+
align: AbiAndPrefAlign {
`
``
251
`+
abi: Align(4 bytes),
`
``
252
`+
pref: Align(8 bytes),
`
``
253
`+
},
`
``
254
`+
abi: Scalar(
`
``
255
`+
Initialized {
`
``
256
`+
value: Int(
`
``
257
`+
I32,
`
``
258
`+
false,
`
``
259
`+
),
`
``
260
`+
valid_range: 1..=4294967295,
`
``
261
`+
},
`
``
262
`+
),
`
``
263
`+
fields: Arbitrary {
`
``
264
`+
offsets: [
`
``
265
`+
Size(0 bytes),
`
``
266
`+
],
`
``
267
`+
memory_index: [
`
``
268
`+
0,
`
``
269
`+
],
`
``
270
`+
},
`
``
271
`+
largest_niche: Some(
`
``
272
`+
Niche {
`
``
273
`+
offset: Size(0 bytes),
`
``
274
`+
value: Int(
`
``
275
`+
I32,
`
``
276
`+
false,
`
``
277
`+
),
`
``
278
`+
valid_range: 1..=4294967295,
`
``
279
`+
},
`
``
280
`+
),
`
``
281
`+
variants: Single {
`
``
282
`+
index: 1,
`
``
283
`+
},
`
``
284
`+
max_repr_align: None,
`
``
285
`+
unadjusted_abi_align: Align(4 bytes),
`
``
286
`+
},
`
``
287
`+
],
`
``
288
`+
},
`
``
289
`+
max_repr_align: None,
`
``
290
`+
unadjusted_abi_align: Align(4 bytes),
`
``
291
`+
}
`
``
292
`+
--> $DIR/range_patterns.rs:15:1
`
``
293
`+
|
`
``
294
`+
LL | type A = Optionstd::num::NonZeroU32;
`
``
295
`+
| ^^^^^^
`
``
296
+
``
297
`+
error: layout_of(NonZeroU32New) = Layout {
`
``
298
`+
size: Size(4 bytes),
`
``
299
`+
align: AbiAndPrefAlign {
`
``
300
`+
abi: Align(4 bytes),
`
``
301
`+
pref: Align(8 bytes),
`
``
302
`+
},
`
``
303
`+
abi: Scalar(
`
``
304
`+
Initialized {
`
``
305
`+
value: Int(
`
``
306
`+
I32,
`
``
307
`+
false,
`
``
308
`+
),
`
``
309
`+
valid_range: 1..=4294967295,
`
``
310
`+
},
`
``
311
`+
),
`
``
312
`+
fields: Arbitrary {
`
``
313
`+
offsets: [
`
``
314
`+
Size(0 bytes),
`
``
315
`+
],
`
``
316
`+
memory_index: [
`
``
317
`+
0,
`
``
318
`+
],
`
``
319
`+
},
`
``
320
`+
largest_niche: Some(
`
``
321
`+
Niche {
`
``
322
`+
offset: Size(0 bytes),
`
``
323
`+
value: Int(
`
``
324
`+
I32,
`
``
325
`+
false,
`
``
326
`+
),
`
``
327
`+
valid_range: 1..=4294967295,
`
``
328
`+
},
`
``
329
`+
),
`
``
330
`+
variants: Single {
`
``
331
`+
index: 0,
`
``
332
`+
},
`
``
333
`+
max_repr_align: None,
`
``
334
`+
unadjusted_abi_align: Align(4 bytes),
`
``
335
`+
}
`
``
336
`+
--> $DIR/range_patterns.rs:17:1
`
``
337
`+
|
`
``
338
`+
LL | struct NonZeroU32New(pattern_type!(u32 is 1..));
`
``
339
`+
| ^^^^^^^^^^^^^^^^^^^^
`
``
340
+
``
341
`+
error: aborting due to 5 previous errors
`
``
342
+