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...