[Bug tree-optimization/31274] New: gcc 4.1 side effect missed

vitalyb at telenet dot dn dot ua gcc-bugzilla@gcc.gnu.org
Mon Mar 19 23:09:00 GMT 2007


While compiling code below with -O1 second call to ubasic_get_variable() gets
optimized out and code works incorrectly as ubasic_set_variable() can modify
variables[].

Code runs as expected when compiled with 4.0.2 or with 4.1.1, 4.1.2 (and 4.1
branch) with "-O1 -fno-tree-dominator-opts -fno-tree-fre" switches. Haven't
checked 4.2.

Happes both on x86-64 and arm-elf.

$ arm-elf-gcc -O1 -S test.c
===================================CUT
int ubasic_get_variable(int varnum);
void ubasic_set_variable(int varum, int value);

struct for_state {
  short line_after_for;
  short for_variable;
  int to;
};
#define MAX_FOR_STACK_DEPTH 4
static struct for_state for_stack[MAX_FOR_STACK_DEPTH];
static int for_stack_ptr;

#define MAX_VARNUM 26
int variables[MAX_VARNUM];

void
next_statement(int var)
{

    ubasic_set_variable(var, ubasic_get_variable(var) + 1);

    if(ubasic_get_variable(var) <= for_stack[for_stack_ptr - 1].to) {
      jump_line(0);
    }
}

int ubasic_get_variable(int varnum)
{
    return variables[varnum];
}

/* // "fixes" problem also
void xxx(int a, int b)
{
    for_stack[a].to = b;
}
*/
===================================CUT

$ arm-elf-gcc -v
Using built-in specs.
Target: arm-elf
Configured with: /mnt/Sources/GCC/gcc_4/configure --prefix=/opt/arm
--target=arm-elf --enable-interwork --enable-multilib --enable-languages=c
Thread model: single
gcc version 4.1.3 20070319 (prerelease)

$ gcc-4.1.2 -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: /mnt/Sources/GCC/gcc_4_1_2_release/configure
--prefix=/usr/local --libexecdir=/usr/local/lib64 --program-suffix=-4.1.2
--enable-shared --enable-threads=posix --enable-__cxa_atexit
--enable-clocale=gnu --disable-multilib
--enable-languages=c,c++,objc,fortran,java,obj-c++
Thread model: posix
gcc version 4.1.2


Thanks.


-- 
           Summary: gcc 4.1 side effect missed
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: vitalyb at telenet dot dn dot ua
  GCC host triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31274



More information about the Gcc-bugs mailing list