aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-04-17 15:56:15 +0200
committerMartin Liska <marxin@gcc.gnu.org>2015-04-17 13:56:15 +0000
commitbbd08a5dfa54f0f694c7869662531498c3289164 (patch)
treeb8ea62df3ba560f4617a94213a69ec7fe5ce7aa3 /gcc
parentc11cdefbd1b1170deaaea321f919e3d04cbf25af (diff)
downloadgcc-bbd08a5dfa54f0f694c7869662531498c3289164.zip
gcc-bbd08a5dfa54f0f694c7869662531498c3289164.tar.gz
gcc-bbd08a5dfa54f0f694c7869662531498c3289164.tar.bz2
Fix IPA memory leaks.
* ipa-cp.c (ipcp_driver): Release prev_edge_clone. * ipa-icf.c (sem_item_optimizer::subdivide_classes_by_sensitive_refs): Release symbol_compare_collection. * ipa-reference.c: Add TODO that a vector should be released. From-SVN: r222180
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-icf.c26
-rw-r--r--gcc/ipa-reference.c1
3 files changed, 27 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 275e4e0..75c3ef3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-04-17 Martin Liska <mliska@suse.cz>
+
+ * ipa-icf.c (sem_item_optimizer::subdivide_classes_by_sensitive_refs):
+ Release symbol_compare_collection.
+ * ipa-reference.c: Add TODO that a vector should be released.
+
2015-04-17 Sivanupandi Pitchumani <Pitchumani.Sivanupandi@atmel.com>
PR target/65296
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index b902373..a72ac2e 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -2712,6 +2712,9 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
unsigned
sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
{
+ typedef hash_map <symbol_compare_collection *, vec <sem_item *>,
+ symbol_compare_hashmap_traits> subdivide_hash_map;
+
unsigned newly_created_classes = 0;
for (hash_table <congruence_class_group_hash>::iterator it = m_classes.begin ();
@@ -2726,8 +2729,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
if (c->members.length() > 1)
{
- hash_map <symbol_compare_collection *, vec <sem_item *>,
- symbol_compare_hashmap_traits> split_map;
+ subdivide_hash_map split_map;
for (unsigned j = 0; j < c->members.length (); j++)
{
@@ -2735,10 +2737,15 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
symbol_compare_collection *collection = new symbol_compare_collection (source_node->node);
- vec <sem_item *> *slot = &split_map.get_or_insert (collection);
+ bool existed;
+ vec <sem_item *> *slot = &split_map.get_or_insert (collection,
+ &existed);
gcc_checking_assert (slot);
slot->safe_push (source_node);
+
+ if (existed)
+ delete collection;
}
/* If the map contains more than one key, we have to split the map
@@ -2747,9 +2754,8 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
{
bool first_class = true;
- hash_map <symbol_compare_collection *, vec <sem_item *>,
- symbol_compare_hashmap_traits>::iterator it2 = split_map.begin ();
- for (; it2 != split_map.end (); ++it2)
+ for (subdivide_hash_map::iterator it2 = split_map.begin ();
+ it2 != split_map.end (); ++it2)
{
congruence_class *new_cls;
new_cls = new congruence_class (class_id++);
@@ -2772,6 +2778,14 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
}
}
}
+
+ /* Release memory. */
+ for (subdivide_hash_map::iterator it2 = split_map.begin ();
+ it2 != split_map.end (); ++it2)
+ {
+ delete (*it2).first;
+ (*it2).second.release ();
+ }
}
}
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index 219a9b3..a420cb2 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -150,6 +150,7 @@ static struct cgraph_node_hook_list *node_removal_hook_holder;
Indexed by UID of call graph nodes. */
static vec<ipa_reference_vars_info_t> ipa_reference_vars_vector;
+/* TODO: find a place where we should release the vector. */
static vec<ipa_reference_optimization_summary_t> ipa_reference_opt_sum_vector;
/* Return the ipa_reference_vars structure starting from the cgraph NODE. */