aboutsummaryrefslogtreecommitdiff
path: root/gcc/symbol-summary.h
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 /gcc/symbol-summary.h
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
Diffstat (limited to 'gcc/symbol-summary.h')
-rw-r--r--gcc/symbol-summary.h17
1 files changed, 17 insertions, 0 deletions
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)
{