Hello there, I ve two gcc warning regarding data size operations
src/hash.c
unsigned long
hash_pointer (const void *ptr)
{
.....
#if SIZEOF_VOID_P > 4
key += (key << 44);
key ^= (key >> 54);
key += (key << 36);
key ^= (key >> 41);
key += (key << 42);
key ^= (key >> 34);
key += (key << 39);
key ^= (key >> 44);
#endif
return (unsigned long) key;
}
this one is minor, the shift count is superior or equal to uintptr_t
size, /* quad needed */
the second one is in src/utils.c:1490
and I think is more "problematic", integer overflow in expression
else if (n < 10*(W)1000000000) DIGITS_10 (1000000000);
else if (n < 100*(W)1000000000) DIGITS_11 (10*(W)1000000000);
else if (n < 1000*(W)1000000000) DIGITS_12 (100*(W)1000000000);
else if (n < 10000*(W)1000000000) DIGITS_13 (1000*(W)1000000000);
else if (n < 100000*(W)1000000000) DIGITS_14 (10000*(W)1000000000);
else if (n < 1000000*(W)1000000000) DIGITS_15 (100000*(W)1000000000);
else if (n < 10000000*(W)1000000000) DIGITS_16 (1000000*(W)1000000000);
else if (n < 100000000*(W)1000000000) DIGITS_17 (10000000*(W)1000000000);
else if (n < 1000000000*(W)1000000000) DIGITS_18 (100000000*(W)1000000000);
else DIGITS_19 (1000000000*(W)1000000000);
I can pach it but I would like to understand exactly what you do here
Cheers!
--
-mmw