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.


More information about the gmp-discuss mailing list