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