From b5be09564188b39aa2fbc73b057c1e35e99ee99f Mon Sep 17 00:00:00 2001 From: Devon Hollowood Date: Mon, 7 Mar 2016 12:26:00 -0800 Subject: [PATCH] Improve tests for #26114 --- .../run-pass/enum-discrim-manual-sizing.rs | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/test/run-pass/enum-discrim-manual-sizing.rs b/src/test/run-pass/enum-discrim-manual-sizing.rs index 377f52a62c5..3bbc107e0b9 100644 --- a/src/test/run-pass/enum-discrim-manual-sizing.rs +++ b/src/test/run-pass/enum-discrim-manual-sizing.rs @@ -9,7 +9,7 @@ // except according to those terms. -use std::mem::size_of; +use std::mem::{size_of, align_of}; #[repr(i8)] enum Ei8 { @@ -71,14 +71,20 @@ enum Euint { Buint = 1 } +#[repr(u8)] +enum Eu8NonCLike { + _None, + _Some(T), +} + #[repr(i64)] -enum Ei64_non_c_like { +enum Ei64NonCLike { _None, _Some(T), } #[repr(u64)] -enum Eu64_non_c_like { +enum Eu64NonCLike { _None, _Some(T), } @@ -94,6 +100,17 @@ pub fn main() { assert_eq!(size_of::(), 8); assert_eq!(size_of::(), size_of::()); assert_eq!(size_of::(), size_of::()); - assert_eq!(size_of::>(), 8); - assert_eq!(size_of::>(), 8); + assert_eq!(size_of::>(), 1); + assert_eq!(size_of::>(), 8); + assert_eq!(size_of::>(), 8); + let u8_expected_size = round_up(9, align_of::>()); + assert_eq!(size_of::>(), u8_expected_size); + let array_expected_size = round_up(28, align_of::>()); + assert_eq!(size_of::>(), array_expected_size); + assert_eq!(size_of::>(), 32); +} + +// Rounds x up to the next multiple of a +fn round_up(x: usize, a: usize) -> usize { + ((x + (a - 1)) / a) * a }