Fix memory leak in if-conversion

Message ID 20230223110326.2D39C139B5@imap2.suse-dmz.suse.de
State Unresolved
Headers
Series Fix memory leak in if-conversion |

Checks

Context Check Description
snail/gcc-patch-check warning Git am fail log

Commit Message

Richard Biener Feb. 23, 2023, 11:03 a.m. UTC
  The following fixes if-conversion failing to release data-references
and the data-reference vector.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

	* tree-if-conv.cc (tree_if_conversion): Properly manage
	memory of refs and the contained data references.
---
 gcc/tree-if-conv.cc | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
  

Patch

diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc
index 0e384e36394..f133102ad33 100644
--- a/gcc/tree-if-conv.cc
+++ b/gcc/tree-if-conv.cc
@@ -3534,7 +3534,7 @@  tree_if_conversion (class loop *loop, vec<gimple *> *preds)
   auto_vec <gassign *, 4> writes_to_lower;
   bitmap exit_bbs;
   edge pe;
-  vec<data_reference_p> refs;
+  auto_vec<data_reference_p, 10> refs;
 
  again:
   rloop = NULL;
@@ -3544,7 +3544,6 @@  tree_if_conversion (class loop *loop, vec<gimple *> *preds)
   need_to_predicate = false;
   need_to_rewrite_undefined = false;
   any_complicated_phi = false;
-  refs.create (5);
 
   /* Apply more aggressive if-conversion when loop or its outer loop were
      marked with simd pragma.  When that's the case, we try to if-convert
@@ -3701,8 +3700,10 @@  tree_if_conversion (class loop *loop, vec<gimple *> *preds)
   data_reference_p dr;
   unsigned int i;
   for (i = 0; refs.iterate (i, &dr); i++)
-    free (dr->aux);
-
+    {
+      free (dr->aux);
+      free_data_ref (dr);
+    }
   refs.truncate (0);
 
   if (ifc_bbs)