gcc/g++ 4.8.2 won't convert uint64 to char properly.

Bug #1446291 reported by Ben Greear
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
gcc-4.8 (Ubuntu)
New
Undecided
Unassigned

Bug Description

I have an Ubuntu 14.04 system for arm7l (armhf), and I think
I have found a bug in the g++/gcc compiler.

I am expecting to see 'char c' below to end up as a negative number,
but as you can see, it does not. x86 system shows the negative number
as expected.

Anyone have any ideas for a work-around, or proper code if mine is
buggy?

greearb@build-imx6:~/git/btbits/server$ more test.cc
#include <stdlib.h>
#include <stdio.h>

int main() {
   unsigned long long val = 0x8b;
   char c = val;
   printf("c: %d 0x%x\n", c, c);
   return 0;
}
greearb@build-imx6:~/git/btbits/server$ g++ -o test test.cc
greearb@build-imx6:~/git/btbits/server$ ./test
c: 139 0x8b
greearb@build-imx6:~/git/btbits/server$

greearb@build-imx6:~/git/btbits/server$ g++ --version
g++ (Ubuntu/Linaro 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

On x86 system:

[greearb@ben-dt ~]$ g++ -o test test.cc
[greearb@ben-dt ~]$ ./test
c: -117 0xffffff8b

[greearb@ben-dt ~]$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)

Revision history for this message
Роман Донченко (dpb-r) wrote :

I don't think that's a bug. char is unsigned on ARM by default. Use signed char instead.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.