Re: [PATCH 2/3] xdiff: avoid more compiler warnings with XDL_FAST_HASH on 32-bit machines
From: Thomas Rast <hidden>
Date: 2016-06-15 22:53:53
René Scharfe [off-list ref] writes:
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 <redacted> Signed-off-by: Rene Scharfe <redacted>
Thanks for fixing this. As far as logic and review goes, both patches Acked-by: Thomas Rast <redacted> I haven't checked whether it actually fixes the warnings, however.
quoted hunk
--- 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 *
--
Thomas Rast
trast@{inf,student}.ethz.ch