This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

C/C++ Bug (shifting chars.)


Hello;

The following program prints incorrect result "7f ffffffff" 
(should be "ffffffff ffffffff", I believe). Note, this happens 
only for [signed/unsigned] char types; int works well. (gcc2.7.2 
gives the same wrong result.)

$cat test.c
char c = 0x7F;
main()
{
  char c1 = c << 3 >> 3;
  char c2 = c << 3;
  c2 >>= 3;
  printf("%x %x\n", (int)c1, (int)c2);
}
$ ~/local/bin/gcc -v -o test test.c
Reading specs from
/home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/specs
gcc version egcs-2.90.27 980315 (egcs-1.0.2 release)
 /home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/cpp
-lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=90 -Di386 -D__ELF__
-Dunix -Dlinux -D__i386__ -D__ELF__ -D__unix__ -D__linux__ -D__i386
-D__unix -D__linux -Asystem(posix) -Di386 -Di586 -Asystem(unix)
-Acpu(i386) -Amachine(i386) -D__i386__ -D__i586__ -Asystem(unix)
-Acpu(i386) -Amachine(i386) test.c /tmp/cca09084.i
GNU CPP version egcs-2.90.27 980315 (egcs-1.0.2 release) (i386
Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /home/osv/local/i586-pc-linux-gnulibc1/include
 /home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/include
 /usr/include
End of search list.
 /home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/cc1
/tmp/cca09084.i -quiet -dumpbase test.c -version -o /tmp/cca09084.s
GNU C version egcs-2.90.27 980315 (egcs-1.0.2 release)
(i586-pc-linux-gnulibc1) compiled by GNU C version egcs-2.90.27 980315
(egcs-1.0.2 release).
 /home/osv/local/i586-pc-linux-gnulibc1/bin/as -V -Qy -o
/tmp/cca090841.o /tmp/cca09084.s
GNU assembler version 971211 (i586-pc-linux-gnulibc1), using BFD version
971211
 /home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/ld -m
elf_i386 -dynamic-linker /lib/ld-linux.so.1 -o test /usr/lib/crt1.o
/usr/lib/crti.o
/home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/crtbegin.o
-L/home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27
-L/home/osv/local/i586-pc-linux-gnulibc1/lib -L/home/osv/local/lib
/tmp/cca090841.o -lgcc -lc -lgcc
/home/osv/local/lib/gcc-lib/i586-pc-linux-gnulibc1/egcs-2.90.27/crtend.o
/usr/lib/crtn.o
$./test
7f ffffffff

Regards,
Sergei Organov.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]