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)

Reply via email to