This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[lno] Loop miscompilation
- From: Falk Hueffner <hueffner at informatik dot uni-tuebingen dot de>
- To: gcc-bugs at gcc dot gnu dot org
- Cc: Zdenek Dvorak <rakdver at atrey dot karlin dot mff dot cuni dot cz>
- Date: Sun, 14 Mar 2004 20:46:03 +0100
- Subject: [lno] Loop miscompilation
Hi,
this test case is extracted from gnugo. No problem with tree-ssa or
other gccs.
gcc (GCC) 3.5-tree-ssa-lno 20040314 (merged 20040221)
% gcc bla.c && ./a.out && echo --- && gcc -O2 bla.c && ./a.out
i = 0 j = 0 queue1[0] = 17
i = 0 j = 1 queue1[0] = 17
i = 0 j = 2 queue1[0] = 17
i = 0 j = 3 queue1[0] = 17
i = 0 j = 0 queue1[0] = 17
i = 0 j = 1 queue1[0] = 17
i = 0 j = 2 queue1[0] = 17
i = 0 j = 3 queue1[0] = 17
---
i = 0 j = 0 queue1[0] = 0
i = 0 j = 1 queue1[0] = 0
i = 0 j = 2 queue1[0] = 0
i = 0 j = 3 queue1[0] = 0
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *state_to;
int *state_from;
int *queue1;
int *queue2;
int *tempq;
int next_new_state;
int q1p;
int q2p;
int i, j;
state_to = calloc(100, sizeof(int));
state_from = calloc(100, sizeof(int));
queue1 = malloc((100) * sizeof(int));
queue2 = malloc((100) * sizeof(int));
q1p = 1;
q2p = 0;
queue1[0] = 17;
state_from[0] = state_to[0] = 0;
state_from[1] = state_to[1] = 1;
next_new_state = 2;
while (q1p) {
for (i = 0; i < q1p; i++) {
for (j = 0; j < 4; j++) {
fprintf(stderr, "i = %d j = %d queue1[%d] = %d\n", i, j, i, queue1[i]);
int n = queue1[i];
if (n && !state_to[n]) {
state_to[n] = next_new_state;
state_from[next_new_state] = n;
next_new_state++;
queue2[q2p++] = n;
}
}
}
tempq = queue1;
queue1 = queue2;
queue2 = tempq;
q1p = q2p;
q2p = 0;
}
return 0;
}
--
Falk