// { dg-do compile } // { dg-additional-options "-Wno-psabi" } class AssertionResult { bool success_; }; AssertionResult AssertionSuccess(); template AssertionResult EXPECT_EQ(const T1& expected, const T1& actual) { if (expected == actual) { return AssertionSuccess(); } return AssertionSuccess(); } struct uuid { unsigned char data[16]; }; bool operator== (uuid const& lhs, uuid const& rhs); typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__)); typedef int __v4si __attribute__ ((__vector_size__ (16))); typedef char __v16qi __attribute__ ((__vector_size__ (16))); typedef long long __m128i_u __attribute__ ((__vector_size__ (16), __may_alias__, __aligned__ (1))); int foo (__v16qi); extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_loadu_si128 (__m128i_u const *__P) { return *__P; } extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_cmpeq_epi32 (__m128i __A, __m128i __B) { return (__m128i) ((__v4si)__A == (__v4si)__B); } extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_movemask_epi8 (__m128i __A) { return foo ((__v16qi)__A); } __m128i load_unaligned_si128(const unsigned char* p) { return _mm_loadu_si128(reinterpret_cast< const __m128i* >(p)); } inline bool operator== (uuid const& lhs, uuid const& rhs) { __m128i mm_left = load_unaligned_si128(lhs.data); __m128i mm_right = load_unaligned_si128(rhs.data); __m128i mm_cmp = _mm_cmpeq_epi32(mm_left, mm_right); return _mm_movemask_epi8(mm_cmp) == 0xFFFF; } void crash_gcc7() { static const uuid u = uuid(); EXPECT_EQ(u, u); }