diff mbox

[3/6] Fix memory leaks in IPA devirt

Message ID 5657732F.1070103@suse.cz
State New
Headers show

Commit Message

Martin Liška Nov. 26, 2015, 9:01 p.m. UTC
On 11/23/2015 11:29 PM, Trevor Saunders wrote:
> On Mon, Nov 23, 2015 at 02:48:37PM +0100, marxin wrote:
>> gcc/ChangeLog:
>>
>> 2015-11-20  Martin Liska  <mliska@suse.cz>
>>
>> 	* ipa-devirt.c (ipa_devirt): Use auto_vec instead
>> 	of a local-scope vec. Release final_warning_records.
>> ---
>>   gcc/ipa-devirt.c | 5 +++--
>>   1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
>> index e74f853..6003c92 100644
>> --- a/gcc/ipa-devirt.c
>> +++ b/gcc/ipa-devirt.c
>> @@ -3837,7 +3837,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 +3887,8 @@ ipa_devirt (void)
>>   			      decl, count, dyn_count);
>>   	    }
>>   	}
>> -	
>> +
>> +      final_warning_records->type_warnings.release ();
>>         delete (final_warning_records);
>
> 	You should be able to just make
> 	final_warning_record::type_warnings an auto_vec right? that
> 	seems less error prone, though this is certainly fine for now.
>
> 	Trev
>
>>         final_warning_records = 0;
>>       }
>> --
>> 2.6.3
>>
>>

Hi.

There's v2 of the patch that reflects ideas suggested by Trevor.

Ready to be installed?
Thanks,
Martin
diff mbox

Patch

From 2362e45abccc28a8fc6ed9ad6cbc69a9bee888c7 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Mon, 23 Nov 2015 14:48:37 +0100
Subject: [PATCH 2/6] Fix memory leaks in IPA devirt

gcc/ChangeLog:

2015-11-20  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.
---
 gcc/ipa-devirt.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

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;
     }
-- 
2.6.3