Can gcc.dg/torture/pr67828.c be an infinite loop?
Richard Biener
richard.guenther@gmail.com
Fri Sep 24 08:08:30 GMT 2021
On Fri, Sep 24, 2021 at 10:04 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.
>
> 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?
Yes, 'c' will wrap to negative SHORT_MIN and terminate the loop via
the c>=0 test.
Mind c++ is really (short)(((int)c)++) and signed integer truncation
is implementation
defined.
Richard.
> Aldy
>
More information about the Gcc
mailing list