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); }