From: Thomas Rast Date: Wed, 23 May 2012 08:30:38 GMT Subject: Re: [PATCH 2/3] xdiff: avoid more compiler warnings with XDL_FAST_HASH on 32-bit machines Message-ID: <8762bn7101.fsf@thomas.inf.ethz.ch> In-Reply-To: <4FBBF8D7.7050701@lsrfire.ath.cx> René Scharfe 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 > Signed-off-by: Rene Scharfe Thanks for fixing this. As far as logic and review goes, both patches Acked-by: Thomas Rast I haven't checked whether it actually fixes the warnings, however. > --- > 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