#ifdef __i386__
#include <cstdio>
struct obj
{
void foo()
{
std::printf( "foo(): this -> %p, val = %d\n",
(void*)this, val );
}
int val;
};
void test( obj& o )
{
o.foo();
}
int main()
{
obj x;
x.val = 7;
asm volatile
(
"push %1 \n\t"
"call *%0 \n\t"
"add $4, %%esp \n\t"
:
: "r" ( &test ), "r" ( &x )
);
return 0;
};
#endif
$ g++ test.cpp -m32 -Wall -O1 && ./a.out
foo(): this -> 0xffffc610, val = -135843852
$ g++ test.cpp -m32 -Wall -O1 -fno-tree-dce && ./a.out
foo(): this -> 0xffffcfd0, val = 7
--
Summary: tree-dce incorrectly removes an assignment.
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: pluto at agmk dot net
GCC target triplet: ix86-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28944