diff options
author | Martin Liska <mliska@suse.cz> | 2015-03-25 12:47:04 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2015-03-25 11:47:04 +0000 |
commit | fdbdc4b5626aea76d0ee6d8b2ae3753db735014d (patch) | |
tree | 120c524db460bafc1e4b428e4f2c9b743d6e2ad4 | |
parent | 2b91aea838279a2fa5f2b09a8590e4007e87025e (diff) | |
download | gcc-fdbdc4b5626aea76d0ee6d8b2ae3753db735014d.zip gcc-fdbdc4b5626aea76d0ee6d8b2ae3753db735014d.tar.gz gcc-fdbdc4b5626aea76d0ee6d8b2ae3753db735014d.tar.bz2 |
re PR tree-optimization/65538 (Memory leak of ipa_node_params_sum elements)
Fix PR65538.
PR tree-optimization/65538
* symbol-summary.h (function_summary::~function_summary):
Relese memory for allocated summaries.
(function_summary::release): New function.
From-SVN: r221658
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/symbol-summary.h | 17 |
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f450b7d..66e0b2c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-03-25 Martin Liska <mliska@suse.cz> + + PR tree-optimization/65538 + * symbol-summary.h (function_summary::~function_summary): + Relese memory for allocated summaries. + (function_summary::release): New function. + 2015-03-25 Jakub Jelinek <jakub@redhat.com> PR lto/65515 diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h index 8d7e42c..0448310 100644 --- a/gcc/symbol-summary.h +++ b/gcc/symbol-summary.h @@ -81,6 +81,11 @@ public: m_symtab_insertion_hook = NULL; m_symtab_removal_hook = NULL; m_symtab_duplication_hook = NULL; + + /* Release all summaries. */ + typedef typename hash_map <int, T *, summary_hashmap_traits>::iterator map_iterator; + for (map_iterator it = m_map.begin (); it != m_map.end (); ++it) + release ((*it).second); } /* Traverses all summarys with a function F called with @@ -106,6 +111,18 @@ public: return m_ggc ? new (ggc_alloc <T> ()) T() : new T () ; } + /* Release an item that is stored within map. */ + void release (T *item) + { + if (m_ggc) + { + item->~T (); + ggc_free (item); + } + else + delete item; + } + /* Getter for summary callgraph node pointer. */ T* get (cgraph_node *node) { |