This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Miscompilation of remainder expressions
Joe Buck <Joe.Buck@synopsys.COM> writes:
> On Wed, Jan 17, 2007 at 05:48:34PM +0000, Andrew Haley wrote:
> > From a performance/convenience angle, the best place to handle this is
> > either libc or the kernel. Either of these can quite easily fix up
> > the operands when a trap happens, with zero performance degradation of
> > existing code. I don't think there's any need for gcc to be altered
> > to handle this.
>
> How will the kernel know whether the overflow in the divide instruction
> is because the user's source code has a '%' and not a '/'? We generate
> the exact same instruction for i / minus_one(), after all, and in that
> case the trap really should be there.
We don't need to generate a trap for INT_MIN / -1. That is undefined
signed overflow. We can legitimately set the quotient register to
INT_MIN while setting the remainder register to zero. (Hmmm, what
should we do if -ftrapv is set? Probably generate a different code
sequence in the compiler.)
We do want to generate a trap for x / 0, of course.
Ian