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 &ap;
    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;
}

Reply via email to