https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119312
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Certainly. If you do struct S { char a[4]; char b[4]; }; extern void foo (struct S *); static struct S s[] = { { "abc", "def" }, { "ghi", "jkl" } }; void bar (void) { foo (&s[1]); } i.e. if the address escapes to something you can't analyze, then such transformation would be invalid. The foo definition validly can void foo (struct S *s) { s[-1].b[2] = ' '; s->a[0] = '1'; } etc.