re PR tree-optimization/65538 (Memory leak of ipa_node_params_sum elements)
authorMartin Liska <mliska@suse.cz>
Wed, 25 Mar 2015 11:47:04 +0000 (12:47 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 25 Mar 2015 11:47:04 +0000 (11:47 +0000)
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

gcc/ChangeLog
gcc/symbol-summary.h

index f450b7d87995f91d1f3d99e8ebb97b3837002fcc..66e0b2c7cfbec89679ab55d0a38168d1b87dcae6 100644 (file)
@@ -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
index 8d7e42c52ad95f65128bd84b4c1cdb3fd3b51474..04483103a94036a65bb35c7764a7f54bd212dee9 100644 (file)
@@ -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)
   {