[llvm] r271380 - Fix off-by-one error in max integer functions

Dylan McKay via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 2 05:21:55 PDT 2016


Have added these assertions in r272515.

On Thu, Jun 2, 2016 at 10:42 PM, Dylan McKay <dylanmckay34 at gmail.com> wrote:

> I will be writing the code that calls this. The method bodies are
> extracted verbatim from isIntN, which is used exclusively in in-tree
> MC/backend code. This would’ve silently overflowed in any of the 34
> occurrences of this function in-tree.
>
> Probably best to return the correct result for N==64 and then (if
> appropriate) error out for N<1 and N>64
>
> I agree, I’ll add this in. Let’s hope it doesn’t bring out any latent bugs.
>>
> On Thu, Jun 2, 2016 at 10:36 PM, John Regehr <regehr at cs.utah.edu> wrote:
>
>> I'm not sure in what circumstances these functions are used.  It is often
>> very bad manners to throw assertions from library code.  But if you are
>> writing the code that calls this code, then an assertion definitely sounds
>> appropriate.
>>
>> Probably best to return the correct result for N==64 and then (if
>> appropriate) error out for N<1 and N>64.
>>
>> John
>>
>>
>> On 6/2/16 12:32 PM, Dylan McKay wrote:
>>
>>> How do you think this should be handled? Assertion error?
>>>
>>> On Thu, Jun 2, 2016 at 10:10 PM, John Regehr <regehr at cs.utah.edu
>>> <mailto:regehr at cs.utah.edu>> wrote:
>>>
>>>          /// Gets the maximum value for a N-bit unsigned integer.
>>>         -inline uint64_t maxUIntN(uint64_t N) { return UINT64_C(1) << N;
>>> }
>>>         +inline uint64_t maxUIntN(uint64_t N) { return (UINT64_C(1) <<
>>>         N) - 1; }
>>>
>>>
>>>     This is still wrong unless N is guaranteed to be no greater than 63.
>>>
>>>     John
>>>
>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160603/1e2b26fa/attachment.html>


More information about the llvm-commits mailing list