[Bug optimization/13816] New: access to local array in while loop is optimized away
a dot simon at kent dot ac dot uk
gcc-bugzilla@gcc.gnu.org
Thu Jan 22 17:37:00 GMT 2004
The body of a while loop that operates on a stack-allocated array is optimized
away. Turning optimizations off gives correct bahviour. I observed this bug with
gcc 3.2.2 on FreeBSD, other people have confirmed this for gcc 3.3.3 20031229 on
Debian.
This program:
#include<stdio.h>
void runBug(int lastElem) {
int localArray[lastElem];
int j;
for(j=0; j<lastElem; j++) localArray[j]=j;
int temp=localArray[0];
size_t current=0;
while (current<lastElem)
localArray[current]=localArray[++current];
localArray[lastElem-1]=temp;
for(j=0; j<lastElem; j++) printf("%i, ",localArray[j]);
};
int main() {
runBug(4);
return 0;
};
compiled with:
gcc -O0 bug.c
gives
./a.out
1, 2, 3, 0,
(the while loop shuffles the list around, which is what I want). However
with optimizations the loop reduces to incrementing the loop counter and
nothing else:
gcc -O2 bug.c
gives:
./a.out
0, 1, 2, 0,
Thanks,
Axel.
--
Summary: access to local array in while loop is optimized away
Product: gcc
Version: 3.3.3
Status: UNCONFIRMED
Severity: critical
Priority: P2
Component: optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: a dot simon at kent dot ac dot uk
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i386-unknown-freebsd5.1
GCC host triplet: i386-unknown-freebsd5.1
GCC target triplet: i386-unknown-freebsd5.1
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13816
More information about the Gcc-bugs
mailing list