[PATCH 2/3] xdiff: avoid more compiler warnings with XDL_FAST_HASH on 32-bit machines
- From
René Scharfe <rene.scharfe@lsrfire.ath.cx>
- Date
- May 22, 2012, 20:36 UTC
- Message-ID
- <4FBBF8D7.7050701@lsrfire.ath.cx>
- In-Reply-To
- <CAA787rmJixvyKhubHXZCDVYc=DdVk8_vHsHF6bOsLQ_j=39bGw@mail.gmail.com>
Hide literals that can cause compiler warnings for 32-bit architectures in expressions that evaluate to small numbers there. Some compilers warn that 0x0001020304050608 won't fit into a 32-bit long, others that shifting right by 56 bits clears a 32-bit value completely.
The correct values are calculated in the 64-bit case, which is all that matters in this if-branch.
Reported-by: Øyvind A. Holm <sunny@sunbase.org> Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> --- xdiff/xutils.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/xdiff/xutils.c b/xdiff/xutils.c index 8580da7..78549e3 100644 --- a/xdiff/xutils.c +++ b/xdiff/xutils.c @@ -272,7 +272,13 @@ static inline long count_masked_bytes(unsigned long mask) * that works for the bytemasks without having to * mask them first. */ - return mask * 0x0001020304050608 >> 56; + /* + * return mask * 0x0001020304050608 >> 56; + * + * Doing it like this avoids warnings on 32-bit machines. + */ + long a = (REPEAT_BYTE(0x01) / 0xff + 1); + return mask * a >> (sizeof(long) * 7); } else { /* * Modified Carl Chatfield G+ version for 32-bit *
-- 1.7.10.2