[Bug middle-end/39794] New: Miscompile with -O2 -funroll-loops

abel at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Fri Apr 17 09:58:00 GMT 2009


The following testcase aborts with -O2 -funroll-loops, but passes with plain
-O2 for me on today's trunk.

--cut here
extern void abort();

void foo(int *a, int n)
{
  int i;
  for (i = 0; i < n; i++)
    {
      a[i] *= 2;
      a[i+1] = a[i-1] + a[i-2];
    }
}

enum {N = 16};
int a[N];
int ref[N] = {0, 1, 4, 2, 10, 12, 24, 44, 72, 136, 232, 416, 736, 1296, 2304,
2032};

int main()
{
  int i;
  for (i = 0; i < N; i++)
    a[i] = i;
  foo(a + 2, N - 3);
  for (i = 0; i < N; i++)
    if (ref[i] != a[i])
      abort();
  return 0;
}

-- cut here


-- 
           Summary: Miscompile with -O2 -funroll-loops
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: abel at gcc dot gnu dot org
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39794



More information about the Gcc-bugs mailing list