This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Division by INT64_MIN
- From: Joseph Myers <joseph at codesourcery dot com>
- To: Matthew Fernandez <matthew dot fernandez at gmail dot com>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Thu, 8 Oct 2015 15:08:35 +0000
- Subject: Re: Division by INT64_MIN
- Authentication-results: sourceware.org; auth=none
- References: <5611DC31 dot 3030301 at gmail dot com> <alpine dot DEB dot 2 dot 10 dot 1510051406260 dot 21676 at digraph dot polyomino dot org dot uk> <5615FA63 dot 2080702 at gmail dot com>
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
joseph@codesourcery.com