On Fri, Sep 24, 2021 at 1:05 AM Aldy Hernandez via Gcc <gcc@gcc.gnu.org> wrote: > > Hi folks. > > My upcoming threading improvements turn the test below into an infinite > runtime loop: > > int a, b; > short c; > > int > main () > { > int j, d = 1; > for (; c >= 0; c++) > { > BODY: > a = d; > d = 0; > if (b) > { > xprintf (0); > if (j) > xprintf (0); > } > } > xprintf (d); > exit (0); > } > > On the false edge out of if(b) we thread directly to BODY, eliding the > loop conditional, because we know that c>=0 because it could never overflow.
Huh about c>=0 being always true? the expression, "c++" is really c= (short)(((int)c)+1). So it will definitely wrap over when c is SHRT_MAX. Thanks, Andrew Pinski > > Since B is globally initialized to 0, this has the effect of turning the > test into an infinite loop. > > Is this correct, or did I miss something? > Aldy >