------- Comment #19 from hjl dot tools at gmail dot com 2010-07-14 15:52 ------- (In reply to comment #15) > I found the similar case with gcc 4.4.4 of MacPorts and gcc 4.4.0 of MinGW. > > -- begin testcase -- > // g++ -O -msse2 test.cpp > typedef long long __m128i __attribute__ ((__vector_size__ (16), > __may_alias__)); > > struct vec > { > __m128i v; > > static vec load(const int * p) > { return (__m128i) __builtin_ia32_loaddqu((char const *)p); } > > const int & operator [](int i) const > { > union u { > __m128i v; > int e[4]; > }; > > return ((const u &)v).e[i]; > } > > vec() {} > vec(const __m128i & a) : v(a) {} > }; > > extern "C" { > int printf (const char*, ...); > } > > int main( int argc, char * argv[] ) > { > __attribute__((aligned(16))) int data[] = > { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5 }; > > vec a = vec::load(data); > > printf("v: %d, %d, %d, %d\n", a[0], a[1], a[2], a[3]); > > return 0; > } > -- end testcase -- > > -- begin output -- > v: 16, 16, 14, 14 > -- end output -- >
This is caused by revision 134947: http://gcc.gnu.org/ml/gcc-cvs/2008-05/msg00107.html -- hjl dot tools at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pinskia at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44900