Hi, this patch fixes rather old bug that prevents ipa-reference to wrok across partition boundary. What happens is that availability code thinks that function is not available and thus we ignore the summary we stream.
Bootstrapped/regtested x86_64-linux. Comitted. I have a testcase that I will sent with additional changes. * cgraph.c (cgraph_node::get_availability): Fix availability of functions in other partitions * varpool.c (varpool_node::get_availability): Likewise. diff --git a/gcc/cgraph.c b/gcc/cgraph.c index c0b45795059..b43adaac7c0 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -2360,7 +2360,7 @@ cgraph_node::get_availability (symtab_node *ref) ref = cref->inlined_to; } enum availability avail; - if (!analyzed) + if (!analyzed && !in_other_partition) avail = AVAIL_NOT_AVAILABLE; else if (local) avail = AVAIL_LOCAL; diff --git a/gcc/predict.def b/gcc/predict.def index 2d8d4958b6d..d8e502152b8 100644 diff --git a/gcc/varpool.c b/gcc/varpool.c index 458cdf1bf37..31ea2132331 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -479,7 +479,7 @@ varpool_node::add (tree decl) enum availability varpool_node::get_availability (symtab_node *ref) { - if (!definition) + if (!definition && !in_other_partition) return AVAIL_NOT_AVAILABLE; if (!TREE_PUBLIC (decl)) return AVAIL_AVAILABLE;