Re: [PATCH 2/3] xdiff: avoid more compiler warnings with XDL_FAST_HASH on 32-bit machines
René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:
Show 10 quoted lines
> 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>
Thanks for fixing this. As far as logic and review goes, both patches
Acked-by: Thomas Rast <trast@student.ethz.ch>
I haven't checked whether it actually fixes the warnings, however.
Show 23 quoted lines
> ---
> 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