https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125627
Bug ID: 125627
Summary: wrong code at -O{2,3} with -fno-tree-sra and above 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/h6ME59rnr
Note:
- fails: trunk
- works: 16.1 and earlier
int printf(const char *, ...);
static int a, b, s, t, aa, u, ab, g, ac = 9, i, ad, ae, af, ag, l, bu, ah, ai,
aj, ak, ba, p;
static short c, d = 47516, e, al, am, f, an, bv;
int h, k, bf;
static volatile char j = 2, ao, ap, aq, ar, as, at, au = 5, o, av, q, aw = 6,
ax = 1, r = -3, ay, az, w;
static volatile int m = 2, bc, bd = 1, be;
unsigned bb;
static unsigned n;
int main() {
short bg[] = {0, 0}, x[8] = {8};
int bh[] = {5, 0, 5}, v[] = {0, 0, 0, 0};
for (; a >= 0; a--) {
at % j >> (r ^ ~at) & m / r &j;
m &at;
char bi = ax % m | an & at, bj = o ^ av ^ aq, bk = ~i;
m | r &at;
be;
short y = n ^ be, z = be > b | y;
if (al)
f = 0;
for (; aa; aa--)
--x[7];
for (; aj;)
u = 0;
for (; u; u--)
bg[0] = s = k = bd = l &= !0;
if (z)
printf("%d", aw ^ ap);
j || ap;
j || ap < aw;
j;
j ≈
if (j) {
for (; f; aa++)
printf("%d", 1);
ah = 0;
for (; ah >= 0; ah--)
++af;
h = 0;
int bl = at | s, bm = r % aw ^ ad;
t = bl;
if (t) {
at;
f = at = s = ak;
}
at = at;
a = ap;
j = ap;
~ah ^ d &&be;
be;
be;
be;
if (b)
a = be;
if (bv)
al = a = aq = al | aq;
ax = aw || ap;
au ^ ao;
au *ao;
unsigned bn = al * n ^ au;
ao ^ au;
w = bn || c * au ^ ao - p;
al = av | au;
n = ao;
p = ~p;
char bo = ai & r & g ^ aw;
aw;
r;
r &aw;
bb = r;
ad = aw;
ay = bm % r;
g = aw | bo ^ r;
ba = bd | ao / au;
ao | bd;
bv &&au + bd;
ao / bd + au;
bv &&ao &&au;
bd;
az = au;
au &&au + ao;
bd = au % bd;
ao > aw || au;
bv = bf = a;
}
m;
m;
an = ax / bi | at ^ r;
aw;
ah = ag = ag & d;
char bp = av && c;
int bq = aq & bp, br = aw - t - ap;
b = bq | am;
av = m & ap;
ap;
ao - ap;
ap;
ao;
m;
if (ap) {
ao;
ap;
r | be &&ai % r &&ae &&ao % be;
r % be;
r;
r &ai &&be;
be | r % ao;
ae || ao *be;
ao &&r;
r > ao;
be % r;
ao;
}
char bs = f || u;
if (ai > bs)
o = ak = u;
f = i = 0;
if (!bk)
continue;
int bw = ae | ao - e;
ao;
ao;
ao;
if (a)
bh[1942] ^= m;
f = ai = ar % ac;
if (af && al)
ac = ar = u;
e = ab = ao ^ ab || bw / w;
ae = ao;
ap;
ap;
if (ap && ba) {
ap = q ^ ap ^ c;
bc;
short bt = bc % as % aa;
bc;
as = bc;
f = bc;
if (bt)
printf("%d", bc);
for (; bu; bu++)
if (br)
printf("0");
e = ba = aw;
}
}
return 0;
}