https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119479

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In particular, changing
                static inline constexpr T det(const storage<T, 3>& a, const
storage<T, 3>& b, const storage<T, 3>& c)
                {
                        static std::array<size_t, 3> i = { 0, 1, 2 };
                        static std::array<size_t, 3> j = { 2, 1, 0 };
                        return  storage<T,3>::dot_sse(a.pinr(i), b.pinr(i),
c.pinr(i)) -
                                storage<T,3>::dot_sse(a.pinr(j), b.pinr(j),
c.pinr(j));

                }
to
                static inline constexpr T det(const storage<T, 3>& a, const
storage<T, 3>& b, const storage<T, 3>& c)
                {
                        static std::array<size_t, 3> i = { 0, 1, 2 };
                        static std::array<size_t, 3> j = { 2, 1, 0 };
                        auto a1 = a.pinr(i), b1 = b.pinr(i), c1 = c.pinr(i);
                        auto a2 = a.pinr(j), b2 = b.pinr(j), c2 = c.pinr(j);
                        return  storage<T,3>::dot_sse(a1, b1, c1) -
                                storage<T,3>::dot_sse(a2, b2, c2);
                }
makes it well defined and consistent -717 result from both compilers and
                        auto c1 = c.pinr(i), b1 = b.pinr(i), a1 = a.pinr(i);
                        auto c2 = c.pinr(j), b2 = b.pinr(j), a2 = a.pinr(j);
consistent 717 result.

Reply via email to