https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119913

            Bug ID: 119913
           Summary: Incorrect code with -ftrivial-auto-var-init=zero
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fanghs666 at gmail dot com
  Target Milestone: ---

static int a[2][2][2] = {};
int printf(const char *, ...);
int main() {
    int b, c;
    for(;;) {
        if (!b) break;
    }
    for(int i = 0; i < 2; i++) {
        for(int j = 0; j < 2; j++) {
            for(int k = 0; k < 2; k++) {
                printf("%d", a[i][j][k]);
                if(c)
                    printf("%d\n", j);
            }
        }
    }
    return 0;
}

The expected output should be "00000000".

$ gcc-trunk -O3 -ftrivial-auto-var-init=zero a.c
$ ./a.out
000000

It seems that the optimizations didn't take zero initialization into account.

Reply via email to