https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116666
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- VectorType<mask_type, N> operator==(VectorType x) const { return VectorType<mask_type, N>::wrap(data == x.data); } VectorType<mask_type, N> operator!=(VectorType x) const { return VectorType<mask_type, N>::wrap(data != x.data); } VectorType<mask_type, N> operator<(VectorType x) const { return VectorType<mask_type, N>::wrap(data < x.data); } VectorType<mask_type, N> operator>(VectorType x) const { return VectorType<mask_type, N>::wrap(data > x.data); } VectorType<mask_type, N> operator<=(VectorType x) const { return VectorType<mask_type, N>::wrap(data <= x.data); } VectorType<mask_type, N> operator>=(VectorType x) const { return VectorType<mask_type, N>::wrap(data >= x.data); } These all should be VectorType<mask_index, N>, mask_type here is a vector type. So yes the newer GCC is correct.