This is the mail archive of the 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 Thu, 8 Oct 2015, Matthew Fernandez wrote:

> 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.

If you don't intend to send a patch, I suggest opening a bug report (but I 
expect it's a bug only in the source code, not in the libgcc binaries).

Joseph S. Myers

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