On 04/03/07 12:22, Andriy Gapon wrote:
$ cat test_shl.c #include <stdint.h> #include <stdio.h>int main() { uint64_t l; l = 0; l--; printf("%.16lX\n", l); l <<= 64; printf("%.16lX\n", l); return 0; } $ cc test_shl.c -o test_shl test_shl.c: In function `main': test_shl.c:11: warning: left shift count >= width of type $ ./test_shl FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF $ uname -srm FreeBSD 6.2-RELEASE-p2 amd64 $ gcc -v Using built-in specs. Configured with: FreeBSD/amd64 system compiler Thread model: posix gcc version 3.4.6 [FreeBSD] 20060305 What gives ? It looks like shift is actually done not by specified number of bits but by that number modulo 64. Please also mind that the same thing happens if I use a variable instead of a constant in that expression.
I see the same thing on -CURRENT. I was doing something like: uint64_t l; l = 1 << 40; but instead did: l = (1 << 30) * 1024; which works fine. This was on i386. Eric _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"

