aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cgraph.c5
-rw-r--r--gcc/symtab.c2
3 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 58696cef..89bdf3b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2019-12-03 Jan Hubicka <hubicka@ucw.cz>
+ * cgraph.c (cgraph_node::verify_node): Check that calls_comdat_local
+ is set only for symbol in comdat group.
+ * symtab.c (symtab_node::dissolve_same_comdat_group_1): Clear it.
+
+2019-12-03 Jan Hubicka <hubicka@ucw.cz>
+
* cgraph.c: Include tree-into-ssa.h
(cgraph_node::get_body): Call update_ssa.
* cgraphunit.c (cgraph_node::expand): Likewise.
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index ae61de4..7288440 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -3094,6 +3094,11 @@ cgraph_node::verify_node (void)
error ("inline clone is forced to output");
error_found = true;
}
+ if (calls_comdat_local && !same_comdat_group)
+ {
+ error ("calls_comdat_local is set outside of a comdat group");
+ error_found = true;
+ }
for (e = indirect_calls; e; e = e->next_callee)
{
if (e->aux)
diff --git a/gcc/symtab.c b/gcc/symtab.c
index f4317d0..a88f45c 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -489,6 +489,8 @@ symtab_node::dissolve_same_comdat_group_list (void)
{
next = n->same_comdat_group;
n->same_comdat_group = NULL;
+ if (dyn_cast <cgraph_node *> (n))
+ dyn_cast <cgraph_node *> (n)->calls_comdat_local = false;
/* Clear comdat_group for comdat locals, since
make_decl_local doesn't. */
if (!TREE_PUBLIC (n->decl))