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

            Bug ID: 125713
           Summary: wrong code at -O1 on x86_64-linux-gnu
           Product: gcc
           Version: 16.0
            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/xTrvhhvWb

Note:
- fails: 14.1 till trunk
- works: 13.4 and earlier

[568] % 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/17.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 17.0.0 20260609 (experimental) (GCC) 
[569] % 
[569] % gcctk -O0 small.c; ./a.out
[570] % 
[570] % gcctk -O1 small.c
[571] % ./a.out
Aborted
[572] % 
[572] % cat small.c
int a[256], j, k, l, m, n;
int aa(int p, int q) {
  for (int f = 0; f < 256; ++f) {
    unsigned c = f;
    for (int g = 0; g < 8; ++g)
      c = c & 1 ? c >> 1 ^ 3988292384 : c >> 1;
    a[f] = c;
  }
  unsigned h = p;
  int i = q;
  for (int b = 0; b < 4; ++b) {
    char d = i;
    i >>= 8;
    h = h >> 8 ^ a[(h ^ d) & 255];
  }
  return h;
}
int o(int p, int q, long r, char s, long t, int u) {
  int v = 1, *x, *y;
  short w = 1;
  x = y = &v;
z:
  *y = -274202625 + *x;
  if (822083585 <= q - v)
    goto ac;
  j = -8;
  if (*x == -q)
    goto ae;
  w = w - 2;
  m = 32751;
  if (536870944 == (3 << u) + 2147483584 / u)
    goto z;
ac:
  k = 1593769989 - ((long)((unsigned long)j << 56) >> 56);
ae:
  l = -2138554379;
  n = aa(0, v);
  n = aa(n, 25165821);
  n = aa(n, (long)((unsigned long)j << 56) >> 56);
  n = aa(n, k);
  n = aa(n, 1);
  n = aa(n, w);
  n = aa(n, 16375);
  n = aa(n, l);
  n = aa(n, 1);
  n = aa(n, 1);
  n = aa(n, 1);
  n = aa(n, 1);
  n = aa(n, 1);
  n = aa(n, 1);
  n = aa(n, 1);
  n = aa(n, m);
  n = aa(n, p);
  n = aa(n, q);
  n = aa(n, r);
  n = aa(n, (long)((unsigned long)s << 56) >> 56);
  n = aa(n, t);
  n = aa(n, u);
  n = aa(n, *x);
  n = aa(n, *y);
  return n;
}
int main() {
  int e = o(2, 1, 1342177473, -100, 4294967222, 4);
  if (1207337067 != e)
    __builtin_abort();
  return 0;
}

Reply via email to