[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [csmith-dev] Bug in GCC LP64 targets


signed char g_2 = (-6L);
   R = ((g_2 ^ 0U)<= (-4L));
   printf("long:%u int:%u R:%d\n", (unsigned)sizeof(long),
(unsigned)sizeof(int), R);
   return R;

All 64-bit versions of GCC I got my hands on print "long:8 int:4 R:1".

It looks like the value propagation is failing to convert the -6L to
signed char.

There is also a potential bug in Csmith here.  A faulty compiler
might replace the last argument to printf with the expression
assigned to R (ie, an optimization) and treat the result as
having type long (ie, a fault).

Depending on the byte/word order of the cpu the top 32-bits of
a 64 bit value, rather than the bottom 32-bits, might be printed.

To be on the safe side, if any expression involved an object or
value having a long type any printf ought to use a long type
modifier to output the value of any associated object that is
assigned to.

Derek M. Jones                         tel: +44 (0) 1252 520 667
Knowledge Software Ltd                 mailto:derek@knosof.co.uk
Source code analysis                   http://www.knosof.co.uk