Christian Jullien wrote:
Simple code below is wrong, even when forcing to long or unsigned long :printf("%08x\n", ((~0) >> 1)); printf("%08x\n", (unsigned long)((~(unsigned long)0) >> 1)); printf("%08x\n", (long)((~(long)0) >> 1)); It prints ffffffff while 7fffffff is expected.
Well, shouldn't it be: ffffffff 7fffffff ffffffff
I played a little bit with sources and F:\tmp\tinycc\win32>diff ..\tcc.BAK ..\tcc.c 5559,5560c5559,5572 < l1 = (t1 == VT_LLONG) ? v1->c.ll : v1->c.i; < l2 = (t2 == VT_LLONG) ? v2->c.ll : v2->c.i; ---if (t1 == VT_LLONG) { l1 = v1->c.ll; } else { l1 = v1->c.i; l1 &= 0xffffffff; } if (t2 == VT_LLONG) { l2 = v2->c.ll; } else { l2 = v2->c.i; l2 &= 0xffffffff; }
Probably "unsigned int" needs to be distinguished from "int". Anyway, if you want to you can push a fix on our "mob" branch, See: http://lists.gnu.org/archive/html/tinycc-devel/2008-11/msg00035.html Thanks. _______________________________________________ Tinycc-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/tinycc-devel
