3 #![allow(non_camel_case_types)]
5 #![feature(never_type)]
9 struct t {a: u8, b: i8}
10 struct u {a: u8, b: i8, c: u8}
11 struct v {a: u8, b: i8, c: v2, d: u32}
12 struct v2 {u: char, v: u8}
13 struct w {a: isize, b: ()}
14 struct x {a: isize, b: (), c: ()}
29 struct ReorderedStruct {
65 enum EnumWithMaybeUninhabitedVariant<T> {
71 enum NicheFilledEnumWithAbsentVariant {
78 assert_eq!(size_of::<u8>(), 1 as usize);
79 assert_eq!(size_of::<u32>(), 4 as usize);
80 assert_eq!(size_of::<char>(), 4 as usize);
81 assert_eq!(size_of::<i8>(), 1 as usize);
82 assert_eq!(size_of::<i32>(), 4 as usize);
83 assert_eq!(size_of::<t>(), 2 as usize);
84 assert_eq!(size_of::<u>(), 3 as usize);
85 // Alignment causes padding before the char and the u32.
87 assert_eq!(size_of::<v>(),
89 assert_eq!(size_of::<isize>(), size_of::<usize>());
90 assert_eq!(size_of::<w>(), size_of::<isize>());
91 assert_eq!(size_of::<x>(), size_of::<isize>());
92 assert_eq!(size_of::<isize>(), size_of::<y>());
94 // Make sure enum types are the appropriate size, mostly
95 // around ensuring alignment is handled properly
97 assert_eq!(size_of::<e1>(), 8 as usize);
98 assert_eq!(size_of::<e2>(), 8 as usize);
99 assert_eq!(size_of::<e3>(), 4 as usize);
100 assert_eq!(size_of::<ReorderedStruct>(), 4);
101 assert_eq!(size_of::<ReorderedEnum>(), 6);
103 assert_eq!(size_of::<EnumEmpty>(), 0);
104 assert_eq!(size_of::<EnumSingle1>(), 0);
105 assert_eq!(size_of::<EnumSingle2>(), 0);
106 assert_eq!(size_of::<EnumSingle3>(), 0);
107 assert_eq!(size_of::<EnumSingle4>(), 1);
108 assert_eq!(size_of::<EnumSingle5>(), 1);
110 assert_eq!(size_of::<EnumWithMaybeUninhabitedVariant<!>>(),
111 size_of::<EnumWithMaybeUninhabitedVariant<()>>());
112 assert_eq!(size_of::<NicheFilledEnumWithAbsentVariant>(), size_of::<&'static ()>());
114 assert_eq!(size_of::<Option<Option<(bool, &())>>>(), size_of::<(bool, &())>());
115 assert_eq!(size_of::<Option<Option<(&(), bool)>>>(), size_of::<(bool, &())>());