/* PR target/46880 */ /* { dg-do run } */ /* { dg-options "-O2 -fno-strict-aliasing -msse2" } */ /* { dg-require-effective-target sse2_runtime } */ typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__)); typedef double (*T)[2]; static __attribute__ ((noinline, noclone)) __m128d foo (__m128d c, __m128d d) { T cp = (T) &c; T dp = (T) &d; __m128d e = { (*cp)[1], (*dp)[1] }; return e; } int main () { __m128d c = { 1.0, 2.0 }; __m128d d = { 3.0, 4.0 }; union { __m128d x; double d[2]; } u; u.x = foo (c, d); if (u.d[0] != 2.0 || u.d[1] != 4.0) __builtin_abort (); return 0; }