From 32502f3c45a3d1753b87d3247989dad39cf131dd Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 22 Feb 2019 10:29:06 +0100 Subject: bug #1684: add simplified regression test for respective clang's bug (this also reveal the same bug in Apples's clang) --- test/array_reverse.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'test/array_reverse.cpp') diff --git a/test/array_reverse.cpp b/test/array_reverse.cpp index e23159def..b19a6b356 100644 --- a/test/array_reverse.cpp +++ b/test/array_reverse.cpp @@ -132,6 +132,28 @@ void array_reverse_extra() VERIFY(x.reverse() == y); } +// Simpler version of reverseInPlace leveraging a bug +// in clang 6/7 with -O2 and AVX or AVX512 enabled. +// This simpler version ensure that the clang bug is not hidden +// through mis-inlining of reverseInPlace or other minor changes. +template +EIGEN_DONT_INLINE +void bug1684_work(MatrixType& m1, MatrixType& m2) +{ + m2 = m1; + m2.col(0).swap(m2.col(3)); + m2.col(1).swap(m2.col(2)); +} + +template +void bug1684() +{ + Matrix4f m1 = Matrix4f::Random(); + Matrix4f m2 = Matrix4f::Random(); + bug1684_work(m1,m2); + VERIFY_IS_APPROX(m2, m1.rowwise().reverse().eval()); +} + EIGEN_DECLARE_TEST(array_reverse) { for(int i = 0; i < g_repeat; i++) { @@ -144,6 +166,7 @@ EIGEN_DECLARE_TEST(array_reverse) CALL_SUBTEST_7( reverse(MatrixXcd(internal::random(1,EIGEN_TEST_MAX_SIZE), internal::random(1,EIGEN_TEST_MAX_SIZE))) ); CALL_SUBTEST_8( reverse(Matrix()) ); CALL_SUBTEST_9( reverse(Matrix(internal::random(1,EIGEN_TEST_MAX_SIZE), internal::random(1,EIGEN_TEST_MAX_SIZE))) ); + CALL_SUBTEST_3( bug1684<0>() ); } CALL_SUBTEST_3( array_reverse_extra<0>() ); } -- cgit v1.2.3