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

            Bug ID: 122979
           Summary: wrong code at -O3 on x86_64-linux-gnu
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zhendong.su at inf dot ethz.ch
  Target Milestone: ---

Compiler Explorer: https://godbolt.org/z/3xfvs1v5c

Note:
- fails: trunk
- works: 15.2 and earlier
- -fno-tree-slsr and -fno-ivopts do not make it disappear

[528] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/home/suz/suz-local/software/local/gcc-trunk/bin/../libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--enable-checking=yes --prefix=/local/suz-local/software/local/gcc-trunk
--enable-sanitizers --enable-languages=c,c++ --disable-werror --enable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 16.0.0 20251203 (experimental) (GCC) 
[529] % 
[529] % gcctk -O2 -w small.c; ./a.out
[530] % 
[530] % gcctk -O3 -w small.c
[531] % ./a.out
Segmentation fault
[532] % 
[532] % cat small.c
int a, c, d, e[2], f[6], g[1], h[2], j[1], l, o, q, b[1], n[1], p[1], r[1], v;
unsigned k;
int m[] = {109081251239514,     60707192002,         6080074063089186128,
           8085551053158703836, 2074933913009837614, 3020668471557};
int aa(int ab, unsigned ac) { return ab ^ ac & 5; }
int ad(int ab[]) {
  unsigned s = 4294967295;
  int i = 0;
  for (; i < o; ++i) {
    int u = d;
    u = m[u & 5];
    u = aa(u, ab[i] >> 4);
    s = u;
  }
  return s;
}
int ae(int ab, int ac[][1], int af, int ag[][1]) {
  int w, x;
  w = af - 4;
  x = ab;
  goto ah;
  do {
    if (1 % ag[1][1])
    ah:
      ab = 6 / w - 1;
    ac[0][0] = ag[0][0] - (-1 + x) - -1;
  } while (1 - 1 % ac[0][0] - 1 + ab - 1 - w - 1);
  int z[] = {ab, x, ab, ac[0][0], ac[1][0], w, af, ag[0][0]};
  return ad(z);
}
int ai(int ab, int ac[][2], int af[][3][2]) {
  if (!ac)
    ae(-2, 0, 1, 0);
  int aj[] = {ab,          ac[0][0],    ac[0][1],    a,           1,
              c,           0,           d,           af[0][0][0], af[0][0][1],
              af[0][1][0], af[0][1][1], af[0][2][0], af[0][2][1]};
  return ad(aj);
}
int ak(int ab[][2][3], int ac[][2]) {
  ai(1, (int(*)[])e, (int(*)[][2])f);
  unsigned y = 5;
  int i = 0;
  for (; i < 25; ++i) {
    int al = y;
    al = m[al & 5];
    q = al;
    y = q;
  }
  return q;
}
void am(int ab[], int ac, int af[][2]) {
  int an = 0, ao = 0, t, ap = 2;
  goto aq;
ar:
  ap = an;
  ac = v;
  an = 1 + t;
  if (ak(0, 0) - ai(1, 0, 0) + ac)
    goto aq;
  ao = c;
  int as[] = {2};
  ae(2, (int(*)[])g, -1, (int(*)[])as);
  goto ar;
aq:
  t = 1 + an;
  an = ak((int(*)[][3])b, (int(*)[])n) - 60293 + ab[0] - 1 / ac;
  ab[0] = 0;
  if (ae(-2, (int(*)[])h, -1, (int(*)[])j) + t % ap)
    goto ar;
  ap = 1 / ac;
  int at[] = {ap, ac, t, ao, an};
  for (; l; ++l) {
    int au = k;
    k = m[au] = k ^ at[l];
  }
}
int main() { am(p, 2, (int(*)[])r); }

Reply via email to