------- Comment #4 from rguenth at gcc dot gnu dot org 2009-10-08 14:52 ------- Simplified testcase, fails at -O1. Likely an aliasing issue, but I didn't yet fully investigate (nor ruled out a non-conforming testcase - though TBAA is out of the question here):
typedef unsigned long obj[1]; extern void abort (void); static void test_level2(obj X[]) { if (*X[0] != 12345 || *X[1] != 67890) abort (); } static void test_level1(obj x0, obj x1) { obj X[2]; X[0][0] = x0[0]; X[1][0] = x1[0]; if (*x0 != 12345 || *x1 != 67890) abort (); test_level2 (X); } int main() { obj X[2]; *X[0] = 12345; *X[1] = 67890; test_level1(X[0], X[1]); return 0; } -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu dot | |org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Keywords| |wrong-code Known to fail| |4.3.4 4.4.1 Known to work| |4.2.4 4.5.0 Last reconfirmed|0000-00-00 00:00:00 |2009-10-08 14:52:06 date| | Summary|Optimization error on |[4.3/4.4 Regression] |vectors of uint64_t |Optimization error on | |vectors of uint64_t http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41630