http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50067
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-08-18 11:22:54 UTC --- Smaller testcase: extern void abort (void); int a[6] = { 0, 0, 0, 0, 7, 0 }; static int *p = &a[4]; int main () { int i; for (i = 0; i < 4; ++i) { a[i + 1] = a[i + 2] > i; *p &= ~1; } if (a[4] != 0) abort (); return 0; }