https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95248
Bug ID: 95248 Summary: GCC produces incorrect code with -O3 for loops Product: gcc Version: 10.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: --- GCC produces incorrect code with -O3 for loops Error: >$ gcc -O0 driver.cpp func.cpp && ./a.out 1 >$ gcc -O3 driver.cpp func.cpp && ./a.out 0 Reproducer: >$ cat driver.cpp #include <stdio.h> int var_2 = -2013646301; int var_3 = -1126567434; unsigned int var_12 = 1; unsigned int var_19; unsigned int arr_25 [24] [21] [15] [17] [15] ; void test(); int main() { test(); printf("%u\n", var_19); } >$ cat func.cpp extern int var_2; extern int var_3; extern unsigned int var_12; extern unsigned int var_19; extern unsigned int arr_25 [24] [21] [15] [17] [15] ; void test() { for (int a = 0; a < 3; a = 42) for (int b = 0; b < 20; b++) for (int c = 0; c < 4; c = 4) for (int d = 0; d < 6; d += 4) for (int e = 0; e < 4; e += 2) { arr_25[a][b][c][d][e] = var_2 || var_3; var_19 = var_12; } } GCC version: gcc version 11.0.0 (ed63c387aa0bc1846082524455a6ff1fcec40f9d)