This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Division by INT64_MIN


On 06/10/15 01:09, Joseph Myers wrote:
On Mon, 5 Oct 2015, Matthew Fernandez wrote:

on x86 is emitted as a call to __divdi3. If the numerator or denominator are
negative, __divdi3 negates them. If either of these values is INT64_MIN, I
believe this negation is undefined. Is this correct? If this is the case, then
it seems code like "INT64_MIN / INT64_MIN" which should be perfectly legal
accidentally causes undefined behaviour via libgcc. In practice, everything
seems to work as expected, but it seems to me that the C code of __divdi3
should not be relying on these negations working consistently.

It sounds like some casts to UDWtype should be inserted so the negation
takes place on an unsigned type.

Thanks for the speedy response, Joseph. Should I open a new bug report about this? I suspect there are GCC developers out there who would disagree that this constitutes a bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]