https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111256
Bug ID: 111256 Summary: Wrong code at -O2/3/s since r10-1615-g75efe9cb1f8 Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: shaohua.li at inf dot ethz.ch CC: rguenth at gcc dot gnu.org Target Milestone: --- gcc at -O2/3/s produces the wrong code. Bisected to r10-1615-g75efe9cb1f8 Compiler explorer: https://godbolt.org/z/WPzEMoW6e $ cat a.c int printf(const char *, ...); int a, d, e, g; long b, h; long i() { b++; return b; } int l(int m[], int p[]) { if (d) for (; e; e++) { m[4] = m[0] = m[1] ^ m[2] ^ m[5]; m[7] = m[3] ^ m[6]; m += 4; } m[6] = m[0] ^ 1; m[7] = m[1] ^ m[2] ^ m[7]; m[9] = m[3] ^ m[8]; return 1; } int fn3() { int j[] = {0, 7, 0, 0, 5, 0, 0, 8, 0, 0}; int k[17]; int c = l(j, k); return c; } int main() { for (; h <= 3; h = fn3() + h) { long n[2]; for (; i() < 2;) n[g] = 508; for (; (int)n[0] < 2;) { char o[] = {3, 4, 6, 3, 0, 0, 5, 6, 6, 1, 7, 0, 0, 0, 0, 0}; char *f = o; for (; *f; ++f) ; } } printf("%X\n", a); } $ $ gcc -O0 a.c && ./a.out 0 $ gcc -O2 a.c % ./a.out (Timeout)