summaryrefslogtreecommitdiff
path: root/gcc/analyzer/region-model-manager.cc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2022-07-27 17:38:53 -0400
committerDavid Malcolm <dmalcolm@redhat.com>2022-07-27 17:54:12 -0400
commit1d38fa564edeae1e69e2ad8aa651e9452a6d687a (patch)
tree67a6c428de408cc4301934802073edf9475afc50 /gcc/analyzer/region-model-manager.cc
parent05530fcea07a9ee5c7501867f3f11f0fbc504a06 (diff)
analyzer: fix memory leaks
(cherry picked from r13-334-g99988b0e8b57b3) These leaks all relate to logging within -fdump-analyzer[-stderr] or are one-time leaks; seen with valgrind. gcc/analyzer/ChangeLog: * checker-path.cc (state_change_event::get_desc): Call maybe_free on label_text temporaries. * diagnostic-manager.cc (diagnostic_manager::prune_for_sm_diagnostic): Likewise. * engine.cc (exploded_graph::~exploded_graph): Fix leak of m_per_point_data and m_per_call_string_data values. Simplify cleanup of m_per_function_stats and m_per_point_data values. (feasibility_state::maybe_update_for_edge): Fix leak of result of superedge::get_description. * region-model-manager.cc (region_model_manager::~region_model_manager): Move cleanup of m_setjmp_values to match the ordering of the fields within region_model_manager. Fix leak of values within m_repeated_values_map, m_bits_within_values_map, m_asm_output_values_map, and m_const_fn_result_values_map. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Diffstat (limited to 'gcc/analyzer/region-model-manager.cc')
-rw-r--r--gcc/analyzer/region-model-manager.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc
index 4ec275ecd43..6d248c98fcf 100644
--- a/gcc/analyzer/region-model-manager.cc
+++ b/gcc/analyzer/region-model-manager.cc
@@ -97,12 +97,12 @@ region_model_manager::~region_model_manager ()
iter != m_unknowns_map.end (); ++iter)
delete (*iter).second;
delete m_unknown_NULL;
- for (setjmp_values_map_t::iterator iter = m_setjmp_values_map.begin ();
- iter != m_setjmp_values_map.end (); ++iter)
- delete (*iter).second;
for (poisoned_values_map_t::iterator iter = m_poisoned_values_map.begin ();
iter != m_poisoned_values_map.end (); ++iter)
delete (*iter).second;
+ for (setjmp_values_map_t::iterator iter = m_setjmp_values_map.begin ();
+ iter != m_setjmp_values_map.end (); ++iter)
+ delete (*iter).second;
for (initial_values_map_t::iterator iter = m_initial_values_map.begin ();
iter != m_initial_values_map.end (); ++iter)
delete (*iter).second;
@@ -118,6 +118,10 @@ region_model_manager::~region_model_manager ()
for (sub_values_map_t::iterator iter = m_sub_values_map.begin ();
iter != m_sub_values_map.end (); ++iter)
delete (*iter).second;
+ for (auto iter : m_repeated_values_map)
+ delete iter.second;
+ for (auto iter : m_bits_within_values_map)
+ delete iter.second;
for (unmergeable_values_map_t::iterator iter
= m_unmergeable_values_map.begin ();
iter != m_unmergeable_values_map.end (); ++iter)
@@ -131,6 +135,10 @@ region_model_manager::~region_model_manager ()
for (conjured_values_map_t::iterator iter = m_conjured_values_map.begin ();
iter != m_conjured_values_map.end (); ++iter)
delete (*iter).second;
+ for (auto iter : m_asm_output_values_map)
+ delete iter.second;
+ for (auto iter : m_const_fn_result_values_map)
+ delete iter.second;
/* Delete consolidated regions. */
for (fndecls_map_t::iterator iter = m_fndecls_map.begin ();