[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