https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96801
Bug ID: 96801 Summary: Refactoring of LIM introduced possible bug Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: stefansf at linux dot ibm.com Target Milestone: --- Consider the following example: int a = 0, f = 0, g = 0, h = 0, i = 0; int b = 0; static int c[1][1]; static int *const d = &c[0][0]; int *e = 0; int main() { for (; i < 1; i++) { // LOOP-A for (; b != 0; b++) // LOOP-B if (f != 0) { *e = (*d)--; break; } } for (g = 0; g < 1; g++) { // LOOP-C for (h = 0; h < 1; h++) // LOOP-D a = a ^ c[g][h]; } printf("checksum = %X\n", a); return a; } Basically LOOP-A does nothing since the condition of inner LOOP-B never evaluates to true. Thus we are left with LOOP-C which runs exactly one time as does LOOP-D. Expression a ^ c[g][h] should evaluate to 0 since a as well as c[0][0] are 0. In total we would expect to see "checksum = 0" being printed. This is the case for me prior commit 6aec53ee4f7. With this commit "random" numbers are printed. Can someone confirm this?