[llvm-commits] [PATCH] Fix various instances of undefined behavior

Ahmed Charles ahmedcharles at gmail.com
Thu Oct 13 17:56:45 PDT 2011


On Thu, Oct 13, 2011 at 4:52 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Wed, Oct 12, 2011 at 10:59 PM, Ahmed Charles <ahmedcharles at gmail.com> wrote:
>> On Wed, Oct 12, 2011 at 5:27 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
>>> On Wed, Oct 12, 2011 at 4:37 PM, Ahmed Charles <ahmedcharles at gmail.com> wrote:
>>>> FDIS 5.6/4 suggests that floating point isn't special:
>>>>
>>>> The binary / operator yields the quotient, and the binary % operator
>>>> yields the remainder from the division of the first expression by the
>>>> second. If the second operand of / or % is zero the behavior is
>>>> undefined. For integral operands the / operator yields the algebraic
>>>> quotient with any fractional part discarded;[81] if the quotient a/b
>>>> is representable in the type of the result, (a/b)*b + a%b is equal to
>>>> a.
>>>>
>>>> 81) This is often called truncation towards zero.
>>>>
>>>> Is there somewhere else that gives floating point different semantics?
>>>
>>> The IEEE floating-point standard explicitly defines the result of
>>> division by zero.
>>>
>>
>> That is true, though the C++ standard doesn't require IEEE 754 (aka
>> IEC 559), though it does place requirements on implementations which
>> choose to use IEEE 754, but one of those doesn't seem to be whether
>> division by zero is undefined.
>>
>> This could be perfectly benign on all platforms we care about, but
>> it's in this patch, if you wish to submit it.
>>
>> This patch passes make check-all and selfhosting.
>
> Applied everything except the ProfileEstimatorPass.cpp bits.  For the
> ProfileEstimatorPass.cpp pieces, the code probably isn't doing the
> right thing, but I'm having trouble following what it is actually
> trying to do.
>
> -Eli
>

Thanks. I find it weird that changing the behavior (from infinity to
0) doesn't break any tests at all.




More information about the llvm-commits mailing list