https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94125
--- Comment #9 from rguenther at suse dot de <rguenther at suse dot de> --- On Sun, 15 Mar 2020, amker at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94125 > > --- Comment #7 from bin cheng <amker at gcc dot gnu.org> --- > Patch at https://gcc.gnu.org/pipermail/gcc-patches/2020-March/542038.html > It's a latent bug exposed by the mentioned alias analysis change, however: > > > unsigned char b, f; > short d[1][8][1], *g = &d[0][3][0]; > > int > main () > { > int k[] = { 0, 0, 0, 4, 0, 0 }; > for (int c = 2; c >= 0; c--) > { > b = f; > *g = k[c + 3]; > k[c + 1] = 0; > } > for (int i = 0; i < 8; i++) > if (d[0][i][0] != 0) > __builtin_abort (); > return 0; > } > > We can't tell no-alias info for pairs <f, *g> and <b, *g>. Is this expected > or > should be improved? This is expected when g is not static [const] (we should discover it as const) or when not using LTO (which should as well promote the variable to const short *). Adding a restrict qualifier to g should also solve it.