Can gcc.dg/torture/pr67828.c be an infinite loop?

Andrew Pinski pinskia@gmail.com
Fri Sep 24 09:29:31 GMT 2021


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
>


More information about the Gcc mailing list