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

            Bug ID: 117841
           Summary: Miscompile with -O3 and -O0/1/2
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: yunboni at smail dot nju.edu.cn
  Target Milestone: ---

When I compiled this code with -O3, it triggered SIGSEGV. With -O0/1/2, its
output is 0:

int printf(const char *, ...);
int a, d, e;
char b[11];
char *c;
char f;
static short *h;
long j;
int m(int n, char *o) {
  char *g = o;
  c = b;
  while (n)
    *c++ = n /= 10;
  while (c != b)
    *g++ = *--c;
  *g = '\0';
  return g - o - 1;
}
int p(int n) {
  char k[10];
  int l = m(n, k);
  return l;
}
int main() {
  int *r[5];
  int i = 0;
  for (; p(15) + i < 5; i++)
    r[i] = &d;
  int q = *r[0];
  for (; e;)
    f = *h;
  if (q)
    j = 2;
  printf("%X\n", a);
}

Compiler Explorer: https://godbolt.org/z/r4so7zrcq

Reply via email to