From 3924672cccb7fb273d197aa2a6f5e130bca96323 Mon Sep 17 00:00:00 2001 From: Erik Desjardins Date: Thu, 16 Jul 2020 18:54:26 -0400 Subject: [PATCH] document test changes --- src/test/ui/type-sizes.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/test/ui/type-sizes.rs b/src/test/ui/type-sizes.rs index 0ae9bfcf0bd..73a11a5e743 100644 --- a/src/test/ui/type-sizes.rs +++ b/src/test/ui/type-sizes.rs @@ -103,11 +103,19 @@ enum Option2 { None } +// Two layouts are considered for `CanBeNicheFilledButShouldnt`: +// Niche-filling: +// { u32 (4 bytes), NonZeroU8 + tag in niche (1 byte), padding (3 bytes) } +// Tagged: +// { tag (1 byte), NonZeroU8 (1 byte), padding (2 bytes), u32 (4 bytes) } +// Both are the same size (due to padding), +// but the tagged layout is better as the tag creates a niche with 254 invalid values, +// allowing types like `Option>` to fit into 8 bytes. pub enum CanBeNicheFilledButShouldnt { A(NonZeroU8, u32), B } -pub enum AlwaysTagged { +pub enum AlwaysTaggedBecauseItHasNoNiche { A(u8, u32), B } @@ -159,7 +167,7 @@ pub fn main() { assert_eq!(size_of::(), 8); assert_eq!(size_of::>(), 8); assert_eq!(size_of::>>(), 8); - assert_eq!(size_of::(), 8); - assert_eq!(size_of::>(), 8); - assert_eq!(size_of::>>(), 8); + assert_eq!(size_of::(), 8); + assert_eq!(size_of::>(), 8); + assert_eq!(size_of::>>(), 8); }