Re: Silent gcc 4.2.0 loop optimization bug with -O2

From: Andrey Chernov <ache_at_nagual.pp.ru>
Date: Mon, 25 Jun 2007 19:25:59 +0400
On Mon, Jun 25, 2007 at 05:15:08PM +0200, Ed Schouten wrote:
> I did some more stripping and it turns out this is the problem
> 
> | int
> | main(int argc, char *argv[])
> | {
> |         int i;
> |         int numbers[4] = { 0xdead, 0xbeef, 0x1337, 0x4242 };
> | 
> |         for (i = 1; i <= 12; i++) {
> |                 if (i <= 4)
> |                         printf("%d: %x\n", i, numbers[i-1]);
> |                 else if (i >= 7 && i <= 9)
> |                         printf("MUST BE HERE!!! %d\n", i);
> |         }
> | }
> 
> When you increase the size of the array to 6 or higher, it does what you
> want. It clearly looks like a compiler bug; the size of the array
> shouldn't have an effect on the amount of iterations. 
> 
> You should really file a bug at GCC's to make sure this gets fixed in
> 4.2.1.

I am not familiar with gcc bugs reporting system at all. Could somebody 
running 4.2.1 snapshot tells, is it already fixed, by chance? If no, could 
sumebody fill bug report to them or provide detailed instructions how to 
do that, please?

In any case, we must change default CFLAGS from
-O2 -fno-strict-aliasing -pipe
to
-O -pipe
for -current immediately.

-- 
http://ache.pp.ru/

Received on Mon Jun 25 2007 - 13:26:01 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:13 UTC