I believe the -O1 result is correct.

reg...@john-home:~/volatile/bugs/tmp290/2$ current-gcc -O1 small.c -o small
reg...@john-home:~/volatile/bugs/tmp290/2$ ./small
11
reg...@john-home:~/volatile/bugs/tmp290/2$ current-gcc -O2 small.c -o small
reg...@john-home:~/volatile/bugs/tmp290/2$ ./small
8
reg...@john-home:~/volatile/bugs/tmp290/2$ current-gcc -v

Using built-in specs.
COLLECT_GCC=current-gcc
COLLECT_LTO_WRAPPER=/home/regehr/z/compiler-install/gcc-r157445-install/libexec/gcc/i686-pc-linux-gnu/4.5.0/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ../configure --with-libelf=/usr/local --enable-lto
--prefix=/home/regehr/z/compiler-install/gcc-r157445-install
--program-prefix=r157445- --enable-languages=c,c++
Thread model: posix
gcc version 4.5.0 20100314 (experimental) (GCC) 

reg...@john-home:~/volatile/bugs/tmp290/2$ cat small.c

extern int printf (__const char *__restrict __format, ...);

int g_3[9][2];
int l_5[7][6];

void func_1 (void);
void func_1 (void)
{
  int i, j;

  for (i = 0; i < 7; i++) {
    for (j = 0; j < 6; j++) {
      l_5[i][j] = 4;
    }
  }

  for (g_3[8][0] = 1; g_3[8][0] < 8; g_3[8][0] += 7) {
    int *l_6 = &g_3[8][0];
    *l_6 = l_5[5][2];
  }

}

int main (void)
{
  func_1 ();
  printf ("%d\n", g_3[8][0]);
  return 0;
}


-- 
           Summary: possible wrong code bug
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: regehr at cs dot utah dot edu
 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=43360

Reply via email to