http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46526
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2010-11-19
08:56:05 UTC ---
Looks to me like a tree sharing problem in the FE, will debug it.
int
main ()
{
B b;
A a;
}
is in *.original as:
struct B b;
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (b = TARGET_EXPR <D.1439, {.D.1372={._vptr.Base=&_ZTV1A + 16}}>)
>>>>>;
struct A a;
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (a = TARGET_EXPR <D.1468, {.D.1363={._vptr.Base=&_ZTV1A + 16}}>)
>>>>>;
while
int
main ()
{
A a;
B b;
}
as:
struct A a;
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (a = TARGET_EXPR <D.1439, {.D.1363={._vptr.Base=&_ZTV1B + 16}}>)
>>>>>;
struct B b;
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (b = TARGET_EXPR <D.1468, {.D.1372={._vptr.Base=&_ZTV1B + 16}}>)
>>>>>;
One would expect a being initialized with _ZTV1A + 16 and b with _ZTV1B + 16 in
both cases...