https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127628
Bug ID: 127628
Summary: wrong code at -O{2,3} with "-fno-tree-ccp -fno-inline
-fno-tree-pre -fno-tree-vrp" 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/83Ghr7bYW
Note:
- fails: 15.1 to trunk
- works: 14.4 and earlier
[639] % 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++,lto --disable-werror
--disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 17.0.0 20260926 (experimental) [master r17-1628-gd1c12591336] (GCC)
[640] %
[640] % gcctk -O3 small.c; ./a.out
[641] %
[641] % gcctk -O3 -fno-tree-ccp -fno-inline -fno-tree-pre -fno-tree-vrp small.c
[642] % timeout -s 9 5 ./a.out
Killed
[643] %
[643] % cat small.c
int d[256], e, f, n, m, s, aa, g, o, q, t;
long l, p, r, u, ab;
char z, ac;
int ad(int ae, int af) {
for (int h = 0; h < 256; ++h) {
unsigned c = h;
for (int i = 0; i < 8; ++i)
c = c & 1 ? c >> 1 ^ 3988292384 : c >> 1;
d[h] = c;
}
unsigned j = ae;
int k = af;
for (int b = 0; b < 4; ++b) {
char a = k;
k >>= 8;
j = j >> 8 ^ d[(j ^ a) & 255];
}
return j;
}
int ag(short ae) {
int v, w, *x, **ah = &x, y = -245;
long *am;
o = -88;
ac = o - -o;
if (~l)
goto ai;
aj:
x = &v;
if (q)
*am = -1074740803;
if (!g)
goto ak;
y = 0;
goto al;
do {
*ah = &v;
q = 9;
al:
*x = 8 * q;
o = 128 + p;
x = &w;
if (l != 6)
goto aj;
ai:
z = 10 - o;
am = &r;
w = 0;
} while (y);
ak:
v = -8177;
n = ad(0, (long)((unsigned long)o << 56) >> 56);
n = ad(n, p);
n = ad(n, 0);
n = ad(n, r);
n = ad(n, 15);
n = ad(n, w);
n = ad(n, ac);
n = ad(n, z);
n = ad(n, -8691296369941413888 >> 56);
n = ad(n, y);
n = ad(n, ae);
n = ad(n, 0);
n = ad(n, 0);
n = ad(n, 0);
n = ad(n, 0);
t = *x;
n = ad(n, t);
u = *am;
n = ad(n, u);
return n;
}
int an(int ae, long af, int ao, long ap) {
s = 49635029 - 220198545 / ae + ~ao;
m = 953477111 - ap - af;
aa = ad(0, m);
aa = ad(aa, s);
aa = ad(aa, 0);
aa = ad(aa, ab);
aa = ad(aa, 73);
aa = ad(aa, af);
aa = ad(aa, *d);
return aa;
}
int main() {
while (1) {
if ((-436207456 & e) == -973078400)
break;
f = an(341, -32769, 29, -309366788) + 1035634439;
e = ag(1) + f;
}
}