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