i686 floating point behavior does not agree with unit tests in debug mode · Issue #73288 · rust-lang/rust (original) (raw)
Navigation Menu
- Explore
- Pricing
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
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.
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); |