@@ -23,6 +23,11 @@ macro_rules! const_assert {
2323 } ;
2424}
2525
26+ fn has_broken_floats ( ) -> bool {
27+ // i586 targets are broken due to <https://github.com/rust-lang/rust/issues/114479>.
28+ std:: env:: var ( "TARGET" ) . is_ok_and ( |v| v. contains ( "i586" ) )
29+ }
30+
2631fn f32 ( ) {
2732 const_assert ! ( ( 1f32 ) . to_bits( ) , 0x3f800000 ) ;
2833 const_assert ! ( u32 :: from_be_bytes( 1f32 . to_be_bytes( ) ) , 0x3f800000 ) ;
@@ -41,14 +46,15 @@ fn f32() {
4146
4247 // Check that NaNs roundtrip their bits regardless of signalingness
4348 // 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits
44- // ...actually, let's just check that these break. :D
4549 const MASKED_NAN1 : u32 = f32:: NAN . to_bits ( ) ^ 0x002A_AAAA ;
4650 const MASKED_NAN2 : u32 = f32:: NAN . to_bits ( ) ^ 0x0055_5555 ;
4751
4852 const_assert ! ( f32 :: from_bits( MASKED_NAN1 ) . is_nan( ) ) ;
4953 const_assert ! ( f32 :: from_bits( MASKED_NAN2 ) . is_nan( ) ) ;
5054 const_assert ! ( f32 :: from_bits( MASKED_NAN1 ) . to_bits( ) , MASKED_NAN1 ) ;
51- const_assert ! ( f32 :: from_bits( MASKED_NAN2 ) . to_bits( ) , MASKED_NAN2 ) ;
55+ if !has_broken_floats ( ) {
56+ const_assert ! ( f32 :: from_bits( MASKED_NAN2 ) . to_bits( ) , MASKED_NAN2 ) ;
57+ }
5258}
5359
5460fn f64 ( ) {
@@ -69,14 +75,15 @@ fn f64() {
6975
7076 // Check that NaNs roundtrip their bits regardless of signalingness
7177 // 0xA is 0b1010; 0x5 is 0b0101 -- so these two together clobbers all the mantissa bits
72- // ...actually, let's just check that these break. :D
7378 const MASKED_NAN1 : u64 = f64:: NAN . to_bits ( ) ^ 0x000A_AAAA_AAAA_AAAA ;
7479 const MASKED_NAN2 : u64 = f64:: NAN . to_bits ( ) ^ 0x0005_5555_5555_5555 ;
7580
7681 const_assert ! ( f64 :: from_bits( MASKED_NAN1 ) . is_nan( ) ) ;
7782 const_assert ! ( f64 :: from_bits( MASKED_NAN2 ) . is_nan( ) ) ;
7883 const_assert ! ( f64 :: from_bits( MASKED_NAN1 ) . to_bits( ) , MASKED_NAN1 ) ;
79- const_assert ! ( f64 :: from_bits( MASKED_NAN2 ) . to_bits( ) , MASKED_NAN2 ) ;
84+ if !has_broken_floats ( ) {
85+ const_assert ! ( f64 :: from_bits( MASKED_NAN2 ) . to_bits( ) , MASKED_NAN2 ) ;
86+ }
8087}
8188
8289fn main ( ) {
0 commit comments