packed_simd: {i686,x86_64}-pc-windows-gnu Appveyor builds failing

It appears that incorrect results are produced on windows when the gnu toolchain is used and NaNs are involved.

failures:
---- v64::f32x2_math_cos::cos stdout ----
thread 'v64::f32x2_math_cos::cos' panicked at 'assertion failed: `(left == right)`
  left: `f32x2(-0.00000004371139, -0.00000004371139)`,
 right: `f32x2(NaN, -0.00000004371139)`', src\v64.rs:43:1
---- v64::f32x2_math_fma::fma stdout ----
thread 'v64::f32x2_math_fma::fma' panicked at 'assertion failed: `(left == right)`
  left: `f32x2(1.0, 1.0)`,
 right: `f32x2(NaN, NaN)`', src\v64.rs:43:1
---- v64::f32x2_math_sin::sin stdout ----
thread 'v64::f32x2_math_sin::sin' panicked at 'assertion failed: `(left == right)`
  left: `f32x2(1.0, 1.0)`,
 right: `f32x2(NaN, 1.0)`', src\v64.rs:43:1
---- v64::f32x2_ops_scalar_arith::ops_scalar_arithmetic stdout ----
thread 'v64::f32x2_ops_scalar_arith::ops_scalar_arithmetic' panicked at 'assertion failed: `(left == right)`
  left: `f32x2(NaN, 0.0)`,
 right: `f32x2(0.0, 0.0)`', src\v64.rs:43:1
---- v64::f32x2_ops_vector_arith::ops_vector_arithmetic stdout ----
thread 'v64::f32x2_ops_vector_arith::ops_vector_arithmetic' panicked at 'assertion failed: `(left == right)`
  left: `f32x2(NaN, 0.0)`,
 right: `f32x2(0.0, 0.0)`', src\v64.rs:43:1
failures:
    v64::f32x2_math_cos::cos
    v64::f32x2_math_fma::fma
    v64::f32x2_math_sin::sin
    v64::f32x2_ops_scalar_arith::ops_scalar_arithmetic
    v64::f32x2_ops_vector_arith::ops_vector_arithmetic
test result: FAILED. 1436 passed; 5 failed; 0 ignored; 0 measured; 0 filtered out

cc @retep007

About this issue

  • Original URL
  • State: open
  • Created 6 years ago
  • Comments: 28 (26 by maintainers)

Most upvoted comments

So I haven’t been able to reproduce this yet. Can you replace the asserts with a macro like this:

macro_rules! assert_eq_ {
    ($a:id, $b:id) => { if $a != $b { panic!() } }
}

? And remove the Debug impls, etc.

That would remove all the formatting code and hopefully leave only what matters (compile with -C debuginfo=0 -C panic=abort etc. ). It would also be interesting to know if it only reproduces with -C opt-level=0 or if it also reproduces with -C opt-level=1.

Seems to be a Rust2018 related bug: https://github.com/rust-lang/rust/issues/55344

Rust’s llvm already has this fix. I’ll see if I can reproduce it later on today.