diff options
author | Martin Liska <mliska@suse.cz> | 2019-07-28 19:10:26 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-07-28 17:10:26 +0000 |
commit | fe248a88e5ec39a2faef1fb35a81f0f921fa952d (patch) | |
tree | ba5e596764b3e32248ad0ad682802284d60fddae /gcc/cgraph.c | |
parent | 4f394a9e1c5fffda66f822b13d2b9cc2623db653 (diff) | |
download | gcc-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.c | 26 |
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. */ |