Skip to content

Commit c1f392d

Browse files
committed
add tests for field ordering optimization
1 parent a9128d8 commit c1f392d

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/test/ui/structs-enums/type-sizes.rs

+21
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#![allow(non_camel_case_types)]
44
#![allow(dead_code)]
55
#![feature(never_type)]
6+
#![feature(pointer_is_aligned)]
67

78
use std::mem::size_of;
89
use std::num::NonZeroU8;
@@ -168,6 +169,18 @@ pub enum EnumManyVariant<X> {
168169
_F0, _F1, _F2, _F3, _F4, _F5, _F6, _F7, _F8, _F9, _FA, _FB, _FC, _FD, _FE, _FF,
169170
}
170171

172+
struct Reorder4 {
173+
a: u32,
174+
b: u8,
175+
ary: [u8; 4],
176+
}
177+
178+
struct Reorder2 {
179+
a: u16,
180+
b: u8,
181+
ary: [u8; 6],
182+
}
183+
171184
pub fn main() {
172185
assert_eq!(size_of::<u8>(), 1 as usize);
173186
assert_eq!(size_of::<u32>(), 4 as usize);
@@ -249,4 +262,12 @@ pub fn main() {
249262
assert_eq!(size_of::<EnumManyVariant<Option<NicheU16>>>(), 4);
250263
assert_eq!(size_of::<EnumManyVariant<Option2<NicheU16,u8>>>(), 6);
251264
assert_eq!(size_of::<EnumManyVariant<Option<(NicheU16,u8)>>>(), 6);
265+
266+
267+
let v = Reorder4 {a: 0, b: 0, ary: [0; 4]};
268+
assert_eq!(size_of::<Reorder4>(), 12);
269+
assert!((&v.ary).as_ptr().is_aligned_to(4), "[u8; 4] should group with align-4 fields");
270+
let v = Reorder2 {a: 0, b: 0, ary: [0; 6]};
271+
assert_eq!(size_of::<Reorder2>(), 10);
272+
assert!((&v.ary).as_ptr().is_aligned_to(2), "[u8; 6] should group with align-2 fields");
252273
}

0 commit comments

Comments
 (0)