https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69368
--- Comment #36 from Jakub Jelinek <jakub at gcc dot gnu.org> --- As Richard said, you can do similar (invalid too) stuff in C too, say: struct S { int a[10000]; } s; in one TU and struct S { int a[1]; } s; int foo (int x) { return s.a[x]; } int bar (int x) { return s.a[1 + x] + s.a[0] + s.a[x]; } GCC 5 would compile it to what the author might have meant, while GCC 6 will optimize bar into s.a[0] * 3;