https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64612
--- Comment #4 from Jan Hubicka <hubicka at gcc dot gnu.org> --- I am testing Index: ipa-inline-transform.c =================================================================== --- ipa-inline-transform.c (revision 219674) +++ ipa-inline-transform.c (working copy) @@ -139,7 +137,7 @@ can_remove_node_now_p (struct cgraph_nod /* When we see same comdat group, we need to be sure that all items can be removed. */ - if (!node->same_comdat_group) + if (!node->same_comdat_group || !node->externally_visible) return true; for (next = dyn_cast<cgraph_node *> (node->same_comdat_group); next != node; next = dyn_cast<cgraph_node *> (next->same_comdat_group)) @@ -303,7 +301,7 @@ inline_call (struct cgraph_edge *e, bool /* If aliases are involved, redirect edge to the actual destination and possibly remove the aliases. */ - if (e->callee != callee) + if (e->callee != callee && !e->next_caller && !e->prev_caller) { struct cgraph_node *alias = e->callee, *next_alias; e->redirect_callee (callee);