Skip to content

Commit 42e29fa

Browse files
author
Ulrik Sverdrup
committed
Correct test for enum representation with explicit #[repr]
1 parent 46e935d commit 42e29fa

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

Diff for: src/test/run-pass/enum-discrim-manual-sizing-2.rs

+16-13
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,22 @@ pub fn main() {
9191
assert_eq!(size_of::<Eint<()>>(), size_of::<isize>());
9292
assert_eq!(size_of::<Euint<()>>(), size_of::<usize>());
9393

94-
assert!(size_of::<Ei8<&i32>>() > 1);
95-
assert!(size_of::<Eu8<&i32>>() > 1);
96-
assert!(size_of::<Ei16<&i32>>() > 2);
97-
assert!(size_of::<Eu16<&i32>>() > 2);
98-
assert!(size_of::<Ei32<&i32>>() > 4);
99-
assert!(size_of::<Eu32<&i32>>() > 4);
100-
assert!(size_of::<Ei64<&i32>>() > 8);
101-
assert!(size_of::<Eu64<&i32>>() > 8);
102-
assert!(size_of::<Eint<&i32>>() > size_of::<isize>());
103-
assert!(size_of::<Euint<&i32>>() > size_of::<usize>());
104-
105-
assert!(size_of::<EC<&i32>>() > size_of::<EC<()>>());
106-
94+
// check that the non-nullable pointer optimization is absent
95+
let ptrsize = size_of::<&i32>();
96+
assert!(size_of::<Ei8<&i32>>() > ptrsize);
97+
assert!(size_of::<Eu8<&i32>>() > ptrsize);
98+
assert!(size_of::<Ei16<&i32>>() > ptrsize);
99+
assert!(size_of::<Eu16<&i32>>() > ptrsize);
100+
assert!(size_of::<Ei32<&i32>>() > ptrsize);
101+
assert!(size_of::<Eu32<&i32>>() > ptrsize);
102+
assert!(size_of::<Ei64<&i32>>() > ptrsize);
103+
assert!(size_of::<Eu64<&i32>>() > ptrsize);
104+
assert!(size_of::<Eint<&i32>>() > ptrsize);
105+
assert!(size_of::<Euint<&i32>>() > ptrsize);
106+
107+
assert!(size_of::<EC<&i32>>() > ptrsize);
108+
109+
// test that a zero payload does not influence the discriminant
107110
let zero: &i32 = unsafe { zeroed() };
108111
assert!(match Eu8::_Some(zero) {
109112
Eu8::_Some(_) => true,

0 commit comments

Comments
 (0)