From 73bd7d5fa7ee2b73b0883d575ff2e62ab7fcf620 Mon Sep 17 00:00:00 2001 From: marxin Date: Mon, 9 Nov 2015 15:47:01 +0000 Subject: [PATCH] Fix memory leaks in IPA. * ipa-inline-analysis.c (estimate_function_body_sizes): Call body_info release function. * ipa-prop.c (ipa_release_body_info): New function. (ipa_analyze_node): Call the function. (ipa_node_params::~ipa_node_params): Release known_csts. * ipa-prop.h (ipa_release_body_info): Declare. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230028 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/ipa-inline-analysis.c | 2 +- gcc/ipa-prop.c | 20 +++++++++++++++----- gcc/ipa-prop.h | 2 +- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1d60b7084e0..bc9dbf1f440 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,14 @@ 2015-11-09 Martin Liska + * ipa-inline-analysis.c (estimate_function_body_sizes): Call + body_info release function. + * ipa-prop.c (ipa_release_body_info): New function. + (ipa_analyze_node): Call the function. + (ipa_node_params::~ipa_node_params): Release known_csts. + * ipa-prop.h (ipa_release_body_info): Declare. + +2015-11-09 Martin Liska + * gcc.c (record_temp_file): Release name string. * ifcvt.c (noce_convert_multiple_sets): Use auto_vec instead of vec. diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index c07b0da9007..8c8b8e3af84 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -2853,7 +2853,7 @@ estimate_function_body_sizes (struct cgraph_node *node, bool early) inline_summaries->get (node)->self_time = time; inline_summaries->get (node)->self_size = size; nonconstant_names.release (); - fbi.bb_infos.release (); + ipa_release_body_info (&fbi); if (opt_for_fn (node->decl, optimize)) { if (!early) diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index d15f0ebed56..f379ea73909 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -2258,6 +2258,19 @@ analysis_dom_walker::before_dom_children (basic_block bb) ipa_compute_jump_functions_for_bb (m_fbi, bb); } +/* Release body info FBI. */ + +void +ipa_release_body_info (struct ipa_func_body_info *fbi) +{ + int i; + struct ipa_bb_info *bi; + + FOR_EACH_VEC_ELT (fbi->bb_infos, i, bi) + free_ipa_bb_info (bi); + fbi->bb_infos.release (); +} + /* Initialize the array describing properties of formal parameters of NODE, analyze their uses and compute jump functions associated with actual arguments of calls from within NODE. */ @@ -2313,11 +2326,7 @@ ipa_analyze_node (struct cgraph_node *node) analysis_dom_walker (&fbi).walk (ENTRY_BLOCK_PTR_FOR_FN (cfun)); - int i; - struct ipa_bb_info *bi; - FOR_EACH_VEC_ELT (fbi.bb_infos, i, bi) - free_ipa_bb_info (bi); - fbi.bb_infos.release (); + ipa_release_body_info (&fbi); free_dominance_info (CDI_DOMINATORS); pop_cfun (); } @@ -3306,6 +3315,7 @@ ipa_node_params::~ipa_node_params () free (lattices); /* Lattice values and their sources are deallocated with their alocation pool. */ + known_csts.release (); known_contexts.release (); lattices = NULL; diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index b69ee8ab745..2fe824d35cf 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -775,7 +775,7 @@ bool ipa_modify_expr (tree *, bool, ipa_parm_adjustment_vec); ipa_parm_adjustment *ipa_get_adjustment_candidate (tree **, bool *, ipa_parm_adjustment_vec, bool); - +void ipa_release_body_info (struct ipa_func_body_info *); /* From tree-sra.c: */ tree build_ref_for_offset (location_t, tree, HOST_WIDE_INT, bool, tree, -- 2.11.4.GIT