https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94125
Bug ID: 94125 Summary: wrong code at -O3 on x86_64-linux-gnu Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: qrzhang at gatech dot edu Target Milestone: --- It appears to be a regression in 9. Gcc-8.3 works fine. Bisection points to g:8f70fdc31a7b0099e7322d0aba94830fb08f4c88 $ gcc-trunk -v gcc version 10.0.1 20200310 (experimental) [master revision cc5c935937d:88ecfc48953:3654d49d0ff651b2a78401bc2430428711e7d2eb] (GCC) $ gcc-trunk abc.c ; ./a.out 0 0 0 0 0 0 0 0 $ gcc-trunk -O3 abc.c ; ./a.out 0 0 0 4 0 0 0 0 $ gcc-8 -O3 abc.c ; ./a.out 0 0 0 0 0 0 0 0 $ cat abc.c int printf(const char *, ...); int *a; char b, f; static char c; short d[1][8][1]; int **e = &a; short *g = &d[0][3][0]; unsigned char **h; int i; int main() { unsigned char *j = &b; int k[] = {0, 0, 0, 4, 0, 0}; if (e) { unsigned char **l = &j; c = 2; for (; c >= 0; c--) { **l = f; *g = k[c + 3]; k[c + 1] = 0; } } else { unsigned char **m = &j; for (;;) h = m; } for (; i < 8; i++) printf("%d\n", d[0][i][0]); }