1// PR middle-end/40446
2// { dg-do run { target i?86-*-* x86_64-*-* } }
3// { dg-options "-O1 -msse2" }
4// { dg-require-effective-target sse2 }
5// { dg-require-effective-target sse2_runtime }
6
7#include <emmintrin.h>
8
9extern "C" void abort ();
10
11struct S
12{
13  S (double r, double i) { __real__ s = r; __imag__ s = i; }
14  __complex__ double s;
15};
16
17__m128d
18foo ()
19{
20  S c (0, 1);
21  return _mm_load_pd ((double *) &c);
22}
23
24static void
25__attribute__((noinline))
26sse2_test ()
27{
28  union { __m128d vec; double val[2]; } u;
29  u.vec = foo ();
30  if (u.val[0] != 0 || u.val[1] != 1)
31    abort ();
32}
33
34int
35main ()
36{
37  sse2_test ();
38  return 0;
39}
40