aboutsummaryrefslogtreecommitdiff
path: root/gcc/cgraph.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-07-28 19:10:26 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-07-28 17:10:26 +0000
commitfe248a88e5ec39a2faef1fb35a81f0f921fa952d (patch)
treeba5e596764b3e32248ad0ad682802284d60fddae /gcc/cgraph.c
parent4f394a9e1c5fffda66f822b13d2b9cc2623db653 (diff)
downloadgcc-fe248a88e5ec39a2faef1fb35a81f0f921fa952d.zip
gcc-fe248a88e5ec39a2faef1fb35a81f0f921fa952d.tar.gz
gcc-fe248a88e5ec39a2faef1fb35a81f0f921fa952d.tar.bz2
Release cgraph_{node,edge} via ggc_free (PR ipa/89330).
2019-07-28 Martin Liska <mliska@suse.cz> PR ipa/89330 * cgraph.c (symbol_table::create_edge): Always allocate a cgraph_edge. (symbol_table::free_edge): Store summary_id to edge_released_summary_ids if != -1; * cgraph.h (NEXT_FREE_NODE): Remove. (SET_NEXT_FREE_NODE): Likewise. (NEXT_FREE_EDGE): Likewise. (symbol_table::release_symbol): Store summary_id to cgraph_released_summary_ids if != -1; (symbol_table::allocate_cgraph_symbol): Always allocate a cgraph_node. From-SVN: r273857
Diffstat (limited to 'gcc/cgraph.c')
-rw-r--r--gcc/cgraph.c26
1 files changed, 7 insertions, 19 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 477db38..81250ac 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -846,17 +846,8 @@ symbol_table::create_edge (cgraph_node *caller, cgraph_node *callee,
gcc_assert (is_gimple_call (call_stmt));
}
- if (free_edges)
- {
- edge = free_edges;
- free_edges = NEXT_FREE_EDGE (edge);
- }
- else
- {
- edge = ggc_alloc<cgraph_edge> ();
- edge->m_summary_id = -1;
- }
-
+ edge = ggc_alloc<cgraph_edge> ();
+ edge->m_summary_id = -1;
edges_count++;
gcc_assert (++edges_max_uid != 0);
@@ -1013,16 +1004,13 @@ cgraph_edge::remove_caller (void)
void
symbol_table::free_edge (cgraph_edge *e)
{
+ edges_count--;
+ if (e->m_summary_id != -1)
+ edge_released_summary_ids.safe_push (e->m_summary_id);
+
if (e->indirect_info)
ggc_free (e->indirect_info);
-
- /* Clear out the edge so we do not dangle pointers. */
- int summary_id = e->m_summary_id;
- memset (e, 0, sizeof (*e));
- e->m_summary_id = summary_id;
- NEXT_FREE_EDGE (e) = free_edges;
- free_edges = e;
- edges_count--;
+ ggc_free (e);
}
/* Remove the edge in the cgraph. */