From fcee002edfd1867ab49d9625de6c7907f484a7a9 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Thu, 10 Mar 2016 14:20:53 +0100 Subject: [PATCH] break enum variant discriminant inference in case of 32-bit `assert_eq!(-9223372036854775808isize as u64, 0x8000000000000000);` fails on 32 bit and succeeds on 64 bit. These commits don't change that behavior. The following worked before my changes, because the discriminant was always processed as `u64`. Now it fails, because the discriminant of `Bu64` is now `0` instead of `-9223372036854775808`. This is more in line with the above assertion's code, since `-9223372036854775808isize as u64` on 32 bit yielded `0`. ```rust enum Eu64 { Au64 = 0, Bu64 = 0x8000_0000_0000_0000 } ``` --- src/test/run-pass/enum-discrim-autosizing.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/test/run-pass/enum-discrim-autosizing.rs b/src/test/run-pass/enum-discrim-autosizing.rs index 99e44735d0f03..53c44f2bb24b5 100644 --- a/src/test/run-pass/enum-discrim-autosizing.rs +++ b/src/test/run-pass/enum-discrim-autosizing.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![feature(stmt_expr_attributes)] use std::mem::size_of; @@ -46,11 +47,6 @@ enum Ei64 { Bi64 = 0x8000_0000 } -enum Eu64 { - Au64 = 0, - Bu64 = 0x8000_0000_0000_0000 -} - pub fn main() { assert_eq!(size_of::(), 1); assert_eq!(size_of::(), 1); @@ -58,6 +54,8 @@ pub fn main() { assert_eq!(size_of::(), 2); assert_eq!(size_of::(), 4); assert_eq!(size_of::(), 4); + #[cfg(target_pointer_width = "64")] assert_eq!(size_of::(), 8); - assert_eq!(size_of::(), 8); + #[cfg(target_pointer_width = "32")] + assert_eq!(size_of::(), 4); }