aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-11-27 09:36:52 +0100
committerMartin Liska <marxin@gcc.gnu.org>2015-11-27 08:36:52 +0000
commited37a6cf23d416505804b67438129856f5717c93 (patch)
treef2780a5c28eb21130241402da2d97c9f91a3adb0 /gcc
parent2ce2720078f3e6448ff26e1c4b2041a2f411aa15 (diff)
downloadgcc-ed37a6cf23d416505804b67438129856f5717c93.zip
gcc-ed37a6cf23d416505804b67438129856f5717c93.tar.gz
gcc-ed37a6cf23d416505804b67438129856f5717c93.tar.bz2
Fix memory leaks in IPA devirt
* ipa-devirt.c (ipa_devirt): Use auto_vec instead of a local-scope vec. (struct final_warning_record): Use auto_vec instead of vec. From-SVN: r230994
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ipa-devirt.c7
2 files changed, 10 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 41ef744..cdb47f9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-11-27 Martin Liska <mliska@suse.cz>
+
+ * ipa-devirt.c (ipa_devirt): Use auto_vec instead
+ of a local-scope vec.
+ (struct final_warning_record): Use auto_vec instead
+ of vec.
+
2015-11-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/68553
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index e74f853..1539bb9 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -2987,7 +2987,7 @@ struct decl_warn_count
struct final_warning_record
{
gcov_type dyn_count;
- vec<odr_type_warn_count> type_warnings;
+ auto_vec<odr_type_warn_count> type_warnings;
hash_map<tree, decl_warn_count> decl_warnings;
};
struct final_warning_record *final_warning_records;
@@ -3609,7 +3609,6 @@ ipa_devirt (void)
if (warn_suggest_final_methods || warn_suggest_final_types)
{
final_warning_records = new (final_warning_record);
- final_warning_records->type_warnings = vNULL;
final_warning_records->type_warnings.safe_grow_cleared (odr_types.length ());
free_polymorphic_call_targets_hash ();
}
@@ -3837,7 +3836,7 @@ ipa_devirt (void)
if (warn_suggest_final_methods)
{
- vec<const decl_warn_count*> decl_warnings_vec = vNULL;
+ auto_vec<const decl_warn_count*> decl_warnings_vec;
final_warning_records->decl_warnings.traverse
<vec<const decl_warn_count *> *, add_decl_warning> (&decl_warnings_vec);
@@ -3887,7 +3886,7 @@ ipa_devirt (void)
decl, count, dyn_count);
}
}
-
+
delete (final_warning_records);
final_warning_records = 0;
}