[Bug c/23657] New: Wrong code generated: too much optimized out
qrczak at knm dot org dot pl
gcc-bugzilla@gcc.gnu.org
Wed Aug 31 16:05:00 GMT 2005
/* The result should be 7. When compiled with
gcc version 4.1.0 20050815 (experimental)
with some patches from PLD (incl. PR7776, PR20297, PR23128, PR22533, PR23386)
with -O, the result is 0. */
#include <stdio.h>
int arr[100];
int *alloc(void) {return arr;}
void fill(int n) {
int *result = alloc();
int *dest = result;
for(;;) {
int *next;
dest[0] = 7;
if (--n == 0) break;
next = dest + 1;
dest = next;
}
}
int main(void) {
fill(5);
printf("%d\n", arr[1]);
return 0;
}
/* Looking at the generated assembly code, the whole loop is optimized out,
except for filling the first element. Using less temporaries or inlining
alloc() makes the bug disappear. The bug manifests only with optimization
turned on. */
--
Summary: Wrong code generated: too much optimized out
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: qrczak at knm dot org dot pl
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23657
More information about the Gcc-bugs
mailing list