Fix availability of functions in other partitions
Jan Hubicka
hubicka@ucw.cz
Thu Sep 17 10:43:04 GMT 2020
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;
More information about the Gcc-patches
mailing list