about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2024-08-16 23:08:29 +0200
committerRalf Jung <post@ralfj.de>2024-08-17 10:26:53 +0200
commit53e1a2ee46cbcf84a61464bf62d9543be2c1ce8b (patch)
tree10a9a614d84b45fb3811ff5e7fbba911d5f83619
parent368a4c6808c49baf5e03f9debeff3d53a013e968 (diff)
downloadrust-53e1a2ee46cbcf84a61464bf62d9543be2c1ce8b.tar.gz
rust-53e1a2ee46cbcf84a61464bf62d9543be2c1ce8b.zip
disable problematic float-conv tests in i586 targets
also fix typo in const-float-bits-conv
-rw-r--r--tests/ui/consts/const-float-bits-conv.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/tests/ui/consts/const-float-bits-conv.rs b/tests/ui/consts/const-float-bits-conv.rs
index 74df9013947..aad750c4c97 100644
--- a/tests/ui/consts/const-float-bits-conv.rs
+++ b/tests/ui/consts/const-float-bits-conv.rs
@@ -23,6 +23,11 @@ macro_rules! const_assert {
     };
 }
 
+fn has_broken_floats() -> bool {
+    // i586 targets are broken due to <https://github.com/rust-lang/rust/issues/114479>.
+    std::env::var("TARGET").is_ok_and(|v| v.contains("i586"))
+}
+
 fn f32() {
     const_assert!((1f32).to_bits(), 0x3f800000);
     const_assert!(u32::from_be_bytes(1f32.to_be_bytes()), 0x3f800000);
@@ -41,14 +46,15 @@ fn f32() {
 
     // Check that NaNs roundtrip their bits regardless of signalingness
     // 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits
-    // ...actually, let's just check that these break. :D
     const MASKED_NAN1: u32 = f32::NAN.to_bits() ^ 0x002A_AAAA;
     const MASKED_NAN2: u32 = f32::NAN.to_bits() ^ 0x0055_5555;
 
     const_assert!(f32::from_bits(MASKED_NAN1).is_nan());
-    const_assert!(f32::from_bits(MASKED_NAN1).is_nan());
+    const_assert!(f32::from_bits(MASKED_NAN2).is_nan());
     const_assert!(f32::from_bits(MASKED_NAN1).to_bits(), MASKED_NAN1);
-    const_assert!(f32::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2);
+    if !has_broken_floats() {
+        const_assert!(f32::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2);
+    }
 }
 
 fn f64() {
@@ -69,14 +75,15 @@ fn f64() {
 
     // Check that NaNs roundtrip their bits regardless of signalingness
     // 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits
-    // ...actually, let's just check that these break. :D
     const MASKED_NAN1: u64 = f64::NAN.to_bits() ^ 0x000A_AAAA_AAAA_AAAA;
     const MASKED_NAN2: u64 = f64::NAN.to_bits() ^ 0x0005_5555_5555_5555;
 
     const_assert!(f64::from_bits(MASKED_NAN1).is_nan());
-    const_assert!(f64::from_bits(MASKED_NAN1).is_nan());
+    const_assert!(f64::from_bits(MASKED_NAN2).is_nan());
     const_assert!(f64::from_bits(MASKED_NAN1).to_bits(), MASKED_NAN1);
-    const_assert!(f64::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2);
+    if !has_broken_floats() {
+        const_assert!(f64::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2);
+    }
 }
 
 fn main() {