@@ -298,12 +298,18 @@ fn test_next_up() {
298298 let smallest_normal = f64:: from_bits ( 0x0010_0000_0000_0000 ) ;
299299
300300 // Check that NaNs roundtrip.
301+ // Because x87 can lose NaN bits when passed through a function, ensure the reference value
302+ // also passes through a function boundary.
303+ #[ inline( never) ]
304+ fn identity ( x : f64 ) -> f64 {
305+ crate :: hint:: black_box ( x)
306+ }
301307 let nan0 = f64:: NAN ;
302308 let nan1 = f64:: from_bits ( f64:: NAN . to_bits ( ) ^ 0x000a_aaaa_aaaa_aaaa ) ;
303309 let nan2 = f64:: from_bits ( f64:: NAN . to_bits ( ) ^ 0x0005_5555_5555_5555 ) ;
304- assert_eq ! ( nan0. next_up( ) . to_bits( ) , nan0. to_bits( ) ) ;
305- assert_eq ! ( nan1. next_up( ) . to_bits( ) , nan1. to_bits( ) ) ;
306- assert_eq ! ( nan2. next_up( ) . to_bits( ) , nan2. to_bits( ) ) ;
310+ assert_eq ! ( nan0. next_up( ) . to_bits( ) , identity ( nan0) . to_bits( ) ) ;
311+ assert_eq ! ( nan1. next_up( ) . to_bits( ) , identity ( nan1) . to_bits( ) ) ;
312+ assert_eq ! ( nan2. next_up( ) . to_bits( ) , identity ( nan2) . to_bits( ) ) ;
307313
308314 assert_eq ! ( f64 :: NEG_INFINITY . next_up( ) , f64 :: MIN ) ;
309315 assert_eq ! ( f64 :: MIN . next_up( ) , -max_down) ;
@@ -329,12 +335,18 @@ fn test_next_down() {
329335 let smallest_normal = f64:: from_bits ( 0x0010_0000_0000_0000 ) ;
330336
331337 // Check that NaNs roundtrip.
338+ // Because x87 can lose NaN bits when passed through a function, ensure the reference value
339+ // also passes through a function boundary.
340+ #[ inline( never) ]
341+ fn identity ( x : f64 ) -> f64 {
342+ crate :: hint:: black_box ( x)
343+ }
332344 let nan0 = f64:: NAN ;
333345 let nan1 = f64:: from_bits ( f64:: NAN . to_bits ( ) ^ 0x000a_aaaa_aaaa_aaaa ) ;
334346 let nan2 = f64:: from_bits ( f64:: NAN . to_bits ( ) ^ 0x0005_5555_5555_5555 ) ;
335- assert_eq ! ( nan0. next_down( ) . to_bits( ) , nan0. to_bits( ) ) ;
336- assert_eq ! ( nan1. next_down( ) . to_bits( ) , nan1. to_bits( ) ) ;
337- assert_eq ! ( nan2. next_down( ) . to_bits( ) , nan2. to_bits( ) ) ;
347+ assert_eq ! ( nan0. next_down( ) . to_bits( ) , identity ( nan0) . to_bits( ) ) ;
348+ assert_eq ! ( nan1. next_down( ) . to_bits( ) , identity ( nan1) . to_bits( ) ) ;
349+ assert_eq ! ( nan2. next_down( ) . to_bits( ) , identity ( nan2) . to_bits( ) ) ;
338350
339351 assert_eq ! ( f64 :: NEG_INFINITY . next_down( ) , f64 :: NEG_INFINITY ) ;
340352 assert_eq ! ( f64 :: MIN . next_down( ) , f64 :: NEG_INFINITY ) ;
0 commit comments