Skip to content

Commit cfe1a77

Browse files
committed
Fix -Z print-type-sizes and tests.
This was done by sorting the fields by increasing offset; as a consequence, the order of -Z print-type-sizes matches memory order not source order.
1 parent 025456e commit cfe1a77

File tree

4 files changed

+35
-33
lines changed

4 files changed

+35
-33
lines changed

src/librustc/session/code_stats.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,12 @@ impl CodeStats {
142142
max_variant_size = cmp::max(max_variant_size, size);
143143

144144
let mut min_offset = discr_size;
145-
for field in fields {
145+
146+
// We want to print fields by increasing offset.
147+
let mut fields = fields.clone();
148+
fields.sort_by_key(|f| f.offset);
149+
150+
for field in fields.iter() {
146151
let FieldInfo { ref name, offset, size, align } = *field;
147152

148153
// Include field alignment in output only if it caused padding injection

src/test/ui/print_type_sizes/nullable.stdout

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
1-
print-type-size type: `IndirectNonZero<u32>`: 20 bytes, alignment: 4 bytes
2-
print-type-size field `.pre`: 1 bytes
3-
print-type-size padding: 3 bytes
4-
print-type-size field `.nested`: 12 bytes, alignment: 4 bytes
1+
print-type-size type: `IndirectNonZero<u32>`: 12 bytes, alignment: 4 bytes
2+
print-type-size field `.nested`: 8 bytes
53
print-type-size field `.post`: 2 bytes
6-
print-type-size end padding: 2 bytes
7-
print-type-size type: `MyOption<IndirectNonZero<u32>>`: 20 bytes, alignment: 4 bytes
8-
print-type-size variant `Some`: 20 bytes
9-
print-type-size field `.0`: 20 bytes
10-
print-type-size type: `EmbeddedDiscr`: 12 bytes, alignment: 4 bytes
11-
print-type-size variant `Record`: 10 bytes
12-
print-type-size field `.pre`: 1 bytes
13-
print-type-size padding: 3 bytes
14-
print-type-size field `.val`: 4 bytes, alignment: 4 bytes
15-
print-type-size field `.post`: 2 bytes
16-
print-type-size end padding: 2 bytes
17-
print-type-size type: `NestedNonZero<u32>`: 12 bytes, alignment: 4 bytes
184
print-type-size field `.pre`: 1 bytes
19-
print-type-size padding: 3 bytes
20-
print-type-size field `.val`: 4 bytes, alignment: 4 bytes
5+
print-type-size end padding: 1 bytes
6+
print-type-size type: `MyOption<IndirectNonZero<u32>>`: 12 bytes, alignment: 4 bytes
7+
print-type-size variant `Some`: 12 bytes
8+
print-type-size field `.0`: 12 bytes
9+
print-type-size type: `EmbeddedDiscr`: 8 bytes, alignment: 4 bytes
10+
print-type-size variant `Record`: 7 bytes
11+
print-type-size field `.val`: 4 bytes
12+
print-type-size field `.post`: 2 bytes
13+
print-type-size field `.pre`: 1 bytes
14+
print-type-size end padding: 1 bytes
15+
print-type-size type: `NestedNonZero<u32>`: 8 bytes, alignment: 4 bytes
16+
print-type-size field `.val`: 4 bytes
2117
print-type-size field `.post`: 2 bytes
22-
print-type-size end padding: 2 bytes
18+
print-type-size field `.pre`: 1 bytes
19+
print-type-size end padding: 1 bytes
2320
print-type-size type: `MyOption<core::nonzero::NonZero<u32>>`: 4 bytes, alignment: 4 bytes
2421
print-type-size variant `Some`: 4 bytes
2522
print-type-size field `.0`: 4 bytes

src/test/ui/print_type_sizes/packed.stdout

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
print-type-size type: `Padded`: 16 bytes, alignment: 4 bytes
1+
print-type-size type: `Padded`: 12 bytes, alignment: 4 bytes
2+
print-type-size field `.g`: 4 bytes
3+
print-type-size field `.h`: 2 bytes
24
print-type-size field `.a`: 1 bytes
35
print-type-size field `.b`: 1 bytes
4-
print-type-size padding: 2 bytes
5-
print-type-size field `.g`: 4 bytes, alignment: 4 bytes
66
print-type-size field `.c`: 1 bytes
7-
print-type-size padding: 1 bytes
8-
print-type-size field `.h`: 2 bytes, alignment: 2 bytes
97
print-type-size field `.d`: 1 bytes
10-
print-type-size end padding: 3 bytes
8+
print-type-size end padding: 2 bytes
119
print-type-size type: `Packed`: 10 bytes, alignment: 1 bytes
1210
print-type-size field `.a`: 1 bytes
1311
print-type-size field `.b`: 1 bytes
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
print-type-size type: `E1`: 12 bytes, alignment: 4 bytes
2-
print-type-size discriminant: 4 bytes
3-
print-type-size variant `A`: 5 bytes
4-
print-type-size field `.0`: 4 bytes
2+
print-type-size discriminant: 1 bytes
3+
print-type-size variant `A`: 7 bytes
54
print-type-size field `.1`: 1 bytes
6-
print-type-size variant `B`: 8 bytes
7-
print-type-size field `.0`: 8 bytes
5+
print-type-size padding: 2 bytes
6+
print-type-size field `.0`: 4 bytes, alignment: 4 bytes
7+
print-type-size variant `B`: 11 bytes
8+
print-type-size padding: 3 bytes
9+
print-type-size field `.0`: 8 bytes, alignment: 4 bytes
810
print-type-size type: `E2`: 12 bytes, alignment: 4 bytes
911
print-type-size discriminant: 1 bytes
1012
print-type-size variant `A`: 7 bytes
@@ -15,7 +17,7 @@ print-type-size variant `B`: 11 bytes
1517
print-type-size padding: 3 bytes
1618
print-type-size field `.0`: 8 bytes, alignment: 4 bytes
1719
print-type-size type: `S`: 8 bytes, alignment: 4 bytes
20+
print-type-size field `.g`: 4 bytes
1821
print-type-size field `.a`: 1 bytes
1922
print-type-size field `.b`: 1 bytes
20-
print-type-size padding: 2 bytes
21-
print-type-size field `.g`: 4 bytes, alignment: 4 bytes
23+
print-type-size end padding: 2 bytes

0 commit comments

Comments
 (0)