This is the mail archive of the
mailing list for the GCC project.
Re: Miscompilation of remainder expressions
- From: Michael Veksler <mveksler at tx dot technion dot ac dot il>
- To: gcc at gcc dot gnu dot org
- Date: Mon, 15 Jan 2007 22:34:23 +0200
- Subject: Re: Miscompilation of remainder expressions
- References: <45AB8770.firstname.lastname@example.org>
Roberto Bagnara wrote:
Reading the thread "Autoconf manual's coverage of signed integer
overflow & portability" I was horrified to discover about GCC's
miscompilation of the remainder expression that causes INT_MIN % -1
to cause a SIGFPE on CPUs of the i386 family. Are there plans to
fix this bug (which, to me, looks quite serious)?
All the best,
This problem is quite rare in practice (otherwise there would be
much more complaining). As such it may be too expensive,
performance-wise, to fix in GCC. It seems as one of those
classical things that can be worked-around in the kernel.
Once the kernel sees the FP trap (whatever its i368 name is),
it decodes the machine code and finds:
As far as I remember, this will put the result in two registers
one for div_res and one for mod_res.
Since MIN_INT/-1 is undefined, the kernel may put MIN_INT
in div_res, and mod_res=1. Then return to the following instruction.
Should I open a request for the kernel?