#include <emmintrin.h> #include <complex> #include <cstdlib>
int main () { union { __m128d vec; double val[2]; } u; std::complex<double> c = std::complex<double>(0, 1); u.vec = _mm_load_pd ((double*)&c); if (u.val[0] != 0 || u.val[1] != 1) abort (); } ICEs with -O1 and above in g++ 4.4 and above. More reduced testcase: struct S { S (double r, double i) { __real__ s = r; __imag__ s = i; } __complex__ double s; }; double __attribute__((vector_size (16))) foo () { S c (0, 1); return *(double __attribute__((vector_size (16))) *) &c; } -- Summary: [4.4/4.5 Regression] ICE in gen_lowpart_general Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org GCC target triplet: x86_64-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40446