aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-03-25 12:47:04 +0100
committerMartin Liska <marxin@gcc.gnu.org>2015-03-25 11:47:04 +0000
commitfdbdc4b5626aea76d0ee6d8b2ae3753db735014d (patch)
tree120c524db460bafc1e4b428e4f2c9b743d6e2ad4
parent2b91aea838279a2fa5f2b09a8590e4007e87025e (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/symbol-summary.h17
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)
{