-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Closed
Copy link
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-floating-pointArea: Floating point numbers and arithmeticArea: Floating point numbers and arithmeticA-target-featureArea: Enabling/disabling target features like AVX, Neon, etc.Area: Enabling/disabling target features like AVX, Neon, etc.C-bugCategory: This is a bug.Category: This is a bug.O-x86_32Target: x86 processors, 32 bit (like i686-*) (also known as IA-32, i386, i586, i686)Target: x86 processors, 32 bit (like i686-*) (also known as IA-32, i386, i586, i686)T-langRelevant to the language teamRelevant to the language team
Description
Compiling and running the following code with -C opt-level=0
for 32-bit Linux on a recent nightly (2020-06-07) results in a failing assertion.
fn main() {
let masked_nan2 = f32::NAN.to_bits() ^ 0x0055_5555;
assert_eq!(f32::from_bits(masked_nan2).to_bits(), masked_nan2);
}
rustc +nightly --target=i686-unknown-linux-gnu test.rs && ./test
Output:
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `2144687445`,
right: `2140493141`', test.rs:3:5
However, this code is taken directly from a unit test for libstd
added in #46012, so presumably it should succeed.
Lines 1508 to 1514 in 5949391
let masked_nan1 = f32::NAN.to_bits() ^ 0x002A_AAAA; | |
let masked_nan2 = f32::NAN.to_bits() ^ 0x0055_5555; | |
assert!(f32::from_bits(masked_nan1).is_nan()); | |
assert!(f32::from_bits(masked_nan2).is_nan()); | |
assert_eq!(f32::from_bits(masked_nan1).to_bits(), masked_nan1); | |
assert_eq!(f32::from_bits(masked_nan2).to_bits(), masked_nan2); |
Metadata
Metadata
Assignees
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-floating-pointArea: Floating point numbers and arithmeticArea: Floating point numbers and arithmeticA-target-featureArea: Enabling/disabling target features like AVX, Neon, etc.Area: Enabling/disabling target features like AVX, Neon, etc.C-bugCategory: This is a bug.Category: This is a bug.O-x86_32Target: x86 processors, 32 bit (like i686-*) (also known as IA-32, i386, i586, i686)Target: x86 processors, 32 bit (like i686-*) (also known as IA-32, i386, i586, i686)T-langRelevant to the language teamRelevant to the language team