This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/50066] New: [4.7 Regression] Bad signed long to unsigned long long conversion
- From: "hjl.tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 12 Aug 2011 23:38:41 +0000
- Subject: [Bug middle-end/50066] New: [4.7 Regression] Bad signed long to unsigned long long conversion
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50066
Bug #: 50066
Summary: [4.7 Regression] Bad signed long to unsigned long long
conversion
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: hjl.tools@gmail.com
On Linux/ia32, I got
[hjl@gnu-6 gmp-1]$ cat x.c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
extern unsigned long long foo (long);
int
main ()
{
unsigned long long val = foo (LONG_MIN);
printf ("0x%llx\n", val);
if (val != 0x80000000)
abort ();
return 0;
}
[hjl@gnu-6 gmp-1]$ cat foo.c
unsigned long long
foo (signed long int val)
{
return (unsigned long long) (unsigned long int) (val >= 0 ? val : -val);
}
[hjl@gnu-6 gmp-1]$ make
/export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -m32 -O2 -c -o foo.o foo.c
/export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -m32 -O2 -c -o x.o x.c
/export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -m32 -O2 -o x foo.o x.o
./x
0xffffffff80000000
make: *** [all] Aborted (core dumped)
[hjl@gnu-6 gmp-1]$