Hi, this is second part of fix for PR ipa/61548. Before removing an variable, it is better to remove all its aliases so the constructors can be properly propagated.
Bootstrapped/regtested x86_64-linux. Honza PR ipa/61548 * ipa.c (symbol_table::remove_unreachable_nodes): Fix ordering issue when removing varpool nodes. Index: ipa.c =================================================================== --- ipa.c (revision 220417) +++ ipa.c (working copy) @@ -597,8 +597,20 @@ symbol_table::remove_unreachable_nodes ( or not. */ && (!flag_ltrans || !DECL_EXTERNAL (vnode->decl))) { + struct ipa_ref *ref = NULL; + + /* First remove the aliases, so varpool::remove can possibly lookup + the constructor and save it for future use. */ + while (vnode->iterate_direct_aliases (0, ref)) + { + if (file) + fprintf (file, " %s/%i", ref->referred->name (), + ref->referred->order); + ref->referring->remove (); + } if (file) fprintf (file, " %s/%i", vnode->name (), vnode->order); + vnext = next_variable (vnode); vnode->remove (); changed = true; }