https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95295
Bug ID: 95295 Summary: g++ produces incorrect code with -O3 for loops Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: vsevolod.livinskij at frtk dot ru Target Milestone: --- Error: >$ g++ func.cpp driver.cpp -O0 && ./a.out 1 >$ g++ func.cpp driver.cpp -O3 && ./a.out 0 Reproducer: func.cpp extern int var_4, a; extern unsigned var_9; extern short arr_272[]; void test() { for (int b = 0; b < 9; b++) for (int c = 0; c < 9; c += 4) { arr_272[c] = var_9 ? var_4 : 0; a = 0; } } driver.cpp #include <stdio.h> unsigned long long a; int var_4 = 1; short var_9 = 8; short arr_272[20]; void test(); int main() { test(); printf("%d\n", arr_272[4]); } GCC version: 11.0.0 (bcb63eb2cbd3caf212b9cf42d8c218c09dc6ff8b)