GCC 4.3.2 bug (was: Illegal subtraction in tmp-dive_1.s)
tg at gmplib.org
Fri Apr 17 13:52:39 CEST 2009
Vincent Lefevre <vincent at vinc17.org> writes:
On 2009-04-17 10:29:36 +0200, Torbjorn Granlund wrote:
> Good. (And I am glad you didn't use GCC 4.3.2 which miscompiles
> mpn/generic/rootrem.c, incidentally!)
Do you have any reference, e.g. on GCC's Bugzilla, and a simple
Unfortunately, I don't.
I discovered this bug quite late, when GCC 4.3.3 was already out, and since
the bug does not happen there, I decided not to isolate it.
(The bug might still be present, just masked by other compiler changes,
so ideally one should isolate every bug. But I simply don't have time
to isolate all compiler bugs I run into.)
The smallest test case I have is to build gmp using the compiler and run
make check. :-)
There is a special fixed test case in gmp-4.3.0/test/mpz/t-root.c that
triggers this bug. It triggers on a 64-bit machines. I know for sure
that 4.3.2 miscompiles the file 32-bit machines too, but I am not sure
t-root.c triggers that.
If the test does not trigger 32-bit problems, one should be able to
generate a new test case by using a loop like this:
while true; do GMP_CHECK_RANDOMIZE=1 t-root || break; done
Unfortunately, this is likely to generate very large operands. Editing
the test case code, replacing the "% 12" with something like "% 8"
should help generate a smallish test case.
It is actually quite important to find a failing test case, as a normal
"make check" apparently does not trigger the bug.
This is particularly annoying since GCC 4.3.2 is the main GCC version
under Debian/stable (lenny), and I've checked that the bug is present
under Debian. I've reported the bug in the Debian BTS, hoping that
there would be a backport of the patch.
I actually tried quite hard to find a non-contorted variant of the
problematic file (mpn/generic/rootrem.c) that gcc would not miscompile,
but I failed.
More information about the gmp-discuss