Explicitly truncate bswap operand to uint32_t
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 18 Nov 2009 13:53:27 +0000 (14:53 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 25 Nov 2009 08:16:38 +0000 (00:16 -0800)
There are some places in git where a long is passed to htonl/ntohl. llvm
doesn't support matching operands of different bitwidths intentionally.
This patch fixes the build with llvm-gcc (and clang) on x86_64.

Signed-off-by: Benjamin Kramer <benny.kra@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/bswap.h

index 279e0b48b15e091fc0ca975c3efbd461ab02c149..f3b8c44181776a99c3eb79e15542104d67001c9d 100644 (file)
@@ -24,7 +24,7 @@ static inline uint32_t default_swab32(uint32_t val)
        if (__builtin_constant_p(x)) { \
                __res = default_swab32(x); \
        } else { \
-               __asm__("bswap %0" : "=r" (__res) : "0" (x)); \
+               __asm__("bswap %0" : "=r" (__res) : "0" ((uint32_t)(x))); \
        } \
        __res; })