GCC 4.3.2 bug (was: Illegal subtraction in tmp-dive_1.s)
Torbjorn Granlund
tg at gmplib.org
Fri Apr 17 18:25:04 CEST 2009
Vincent Lefevre <vincent at vinc17.org> writes:
FYI, here's a simple testcase:
/* With GCC 4.3.2 and -O2 option: output value is 1 instead of 0.
* If -fno-strict-aliasing is added, this bug disappears.
*/
#include <stdio.h>
#include <stdlib.h>
int test (int n)
{
unsigned long *p, *q;
int i;
q = p = malloc (n * sizeof (unsigned long));
if (p == NULL)
return 2;
for (i = 0; i < n - 1; i++)
p[i] = 0;
p[n - 1] = 1;
while ((*(q++))-- == 0) ;
return p[n - 1] == 1;
}
int main (void)
{
int r;
r = test (17);
printf ("%d\n", r);
return r;
}
You may want to use it in configure to detect the bug there (as not
all users run "make check"). Possibly add -fno-strict-aliasing if
the bug is detected.
Nice. I think that test should go onto the GCC testsuite.
I suppose a problem is that the code wrt GMP need to be *executed*;
configure feature tests should work also when cross-compiling, I think.
--
Torbjörn
More information about the gmp-discuss
mailing list