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

Aldy Hernandez aldyh@redhat.com
Fri Sep 24 08:03:31 GMT 2021


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?
Aldy



More information about the Gcc mailing list