* Ross Ridge:

> Florian Weimer writes:
>>I don't think this check is correct.  Consider num = 0x33333334 and
>>size = 6.  It seems that the check is difficult to perform efficiently
>>unless the architecture provides unsigned multiplication with overflow
>>detection, or an instruction to implement __builtin_clz.
>
> This should work instead:
>
>       inline size_t __compute_size(size_t num, size_t size) {
>               if (num > ~size_t(0) / size) 
>                       return ~size_t(0);
>               return num * size;
>       }

Yeah, but that division is fairly expensive if it can't be performed
at compile time.  OTOH, if __compute_size is inlined in all places,
code size does increase somewhat.

Reply via email to