@@ -23,6 +23,11 @@ macro_rules! const_assert {
23
23
} ;
24
24
}
25
25
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
+
26
31
fn f32 ( ) {
27
32
const_assert ! ( ( 1f32 ) . to_bits( ) , 0x3f800000 ) ;
28
33
const_assert ! ( u32 :: from_be_bytes( 1f32 . to_be_bytes( ) ) , 0x3f800000 ) ;
@@ -41,14 +46,15 @@ fn f32() {
41
46
42
47
// Check that NaNs roundtrip their bits regardless of signalingness
43
48
// 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
45
49
const MASKED_NAN1 : u32 = f32:: NAN . to_bits ( ) ^ 0x002A_AAAA ;
46
50
const MASKED_NAN2 : u32 = f32:: NAN . to_bits ( ) ^ 0x0055_5555 ;
47
51
48
52
const_assert ! ( f32 :: from_bits( MASKED_NAN1 ) . is_nan( ) ) ;
49
- const_assert ! ( f32 :: from_bits( MASKED_NAN1 ) . is_nan( ) ) ;
53
+ const_assert ! ( f32 :: from_bits( MASKED_NAN2 ) . is_nan( ) ) ;
50
54
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
+ }
52
58
}
53
59
54
60
fn f64 ( ) {
@@ -69,14 +75,15 @@ fn f64() {
69
75
70
76
// Check that NaNs roundtrip their bits regardless of signalingness
71
77
// 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
73
78
const MASKED_NAN1 : u64 = f64:: NAN . to_bits ( ) ^ 0x000A_AAAA_AAAA_AAAA ;
74
79
const MASKED_NAN2 : u64 = f64:: NAN . to_bits ( ) ^ 0x0005_5555_5555_5555 ;
75
80
76
81
const_assert ! ( f64 :: from_bits( MASKED_NAN1 ) . is_nan( ) ) ;
77
- const_assert ! ( f64 :: from_bits( MASKED_NAN1 ) . is_nan( ) ) ;
82
+ const_assert ! ( f64 :: from_bits( MASKED_NAN2 ) . is_nan( ) ) ;
78
83
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
+ }
80
87
}
81
88
82
89
fn main ( ) {
0 commit comments