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