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

            Bug ID: 102606
           Summary: miscompilation of a program with large array in a
                    dead-code
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: k.even-mendoza at imperial dot ac.uk
  Target Milestone: ---

This program miscompiled with gcc-12 (and also older versions) with -O0:

#include "stdio.h"
void foo(int *p)
{
  if(0) // Dead-code
  {
      int *i[(3500)][(300)];
  }
}
int main()
{
  int i = 1;
  foo(&i);
  printf("1\n");
  return 0;
}

the program terminates with Segmentation fault when compiled with -O0 and GCC,
but 
with -O1,O2,O3,Os and clang (all flags), it prints "1" and return 0. 
I assume the definition of "i" is being pulled up, out side the if(0) block.
I used gcc (GCC) 12.0.0 20210811 (experimental).

Reply via email to