1/* PR target/46880 */ 2/* { dg-do run } */ 3/* { dg-options "-O2 -fno-strict-aliasing -msse2" } */ 4/* { dg-require-effective-target sse2_runtime } */ 5 6typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__)); 7typedef double (*T)[2]; 8 9static __attribute__ ((noinline, noclone)) __m128d 10foo (__m128d c, __m128d d) 11{ 12 T cp = (T) &c; 13 T dp = (T) &d; 14 __m128d e = { (*cp)[1], (*dp)[1] }; 15 return e; 16} 17 18int 19main () 20{ 21 __m128d c = { 1.0, 2.0 }; 22 __m128d d = { 3.0, 4.0 }; 23 union { __m128d x; double d[2]; } u; 24 u.x = foo (c, d); 25 if (u.d[0] != 2.0 || u.d[1] != 4.0) 26 __builtin_abort (); 27 return 0; 28} 29