Hi, this patch finally enables local functions for functions with aliases and thunks.
Honza PR ipa/63566 * ipa-visibility.c (cgraph_node::non_local_p): Accept aliases. (cgraph_node::local_p): Remove thunk related FIXME. Index: ipa-visibility.c =================================================================== --- ipa-visibility.c (revision 220509) +++ ipa-visibility.c (working copy) @@ -104,14 +104,15 @@ along with GCC; see the file COPYING3. bool cgraph_node::non_local_p (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) { - /* FIXME: Aliases can be local, but i386 gets thunks wrong then. */ - return !(node->only_called_directly_or_aliased_p () - && !node->has_aliases_p () - && node->definition - && !DECL_EXTERNAL (node->decl) - && !node->externally_visible - && !node->used_from_other_partition - && !node->in_other_partition); + return !(node->only_called_directly_or_aliased_p () + /* i386 would need update to output thunk with locak calling + ocnvetions. */ + && !node->thunk.thunk_p + && node->definition + && !DECL_EXTERNAL (node->decl) + && !node->externally_visible + && !node->used_from_other_partition + && !node->in_other_partition); } /* Return true when function can be marked local. */ @@ -121,12 +122,10 @@ cgraph_node::local_p (void) { cgraph_node *n = ultimate_alias_target (); - /* FIXME: thunks can be considered local, but we need prevent i386 - from attempting to change calling convention of them. */ if (n->thunk.thunk_p) - return false; + return n->callees->callee->local_p (); return !n->call_for_symbol_thunks_and_aliases (cgraph_node::non_local_p, - NULL, true); + NULL, true); }