This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/13828] New: access to local array in while loop is optimized away
- From: "a dot simon at kent dot ac dot uk" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 23 Jan 2004 09:57:46 -0000
- Subject: [Bug optimization/13828] New: access to local array in while loop is optimized away
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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=13828