PATCH: Bad signed int to long long conversion
Vincent Lefevre
vincent at vinc17.net
Thu Dec 1 14:20:58 CET 2011
On 2011-12-01 14:12:41 +0100, Vincent Lefevre wrote:
> On 2011-12-01 13:13:05 +0100, Torbjorn Granlund wrote:
> > The GCC bug report involves two operand sizes, and is indeed invalid.
>
> AFAIK, the VRP logic is not based on these two operand sizes.
> What matters here is that the subtraction (where only one type
> is involved) overflows and GCC assumes that this cannot occur
> in a correct program.
Here's a testcase showing that even with a single type, one gets
problems with -LONG_MIN:
#include <stdio.h>
#include <limits.h>
int foo (long i)
{
long j = i < 0 ? -i : i;
return j >= 0;
}
int main (void)
{
volatile long i = LONG_MIN;
printf ("%d\n", foo (i));
return 0;
}
ypig:~> gcc tst.c -o tst; ./tst
0
ypig:~> gcc -O2 tst.c -o tst; ./tst
1
--
Vincent Lefèvre <vincent at vinc17.net> - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Arénaire project (LIP, ENS-Lyon)
More information about the gmp-bugs
mailing list