tree-optimization/99024 - fix leak in loop vect analysis
authorRichard Biener <rguenther@suse.de>
Wed, 10 Feb 2021 08:06:26 +0000 (09:06 +0100)
committerRichard Biener <rguenther@suse.de>
Wed, 10 Feb 2021 09:09:33 +0000 (10:09 +0100)
When we analyzed a loop as epilogue but later in peeling decide
we're not going to use it then in the DTOR we clear the original
loops ->aux which causes us to leak the main loop vinfo.

Fixed by only clearing aux if it is associated with the vinfo
we're destroying.

2021-02-10  Richard Biener  <rguenther@suse.de>

PR tree-optimization/99024
* tree-vect-loop.c (_loop_vec_info::~_loop_vec_info): Only
clear loop->aux if it is associated with the destroyed loop_vinfo.

gcc/tree-vect-loop.c

index f1f16e3b1b96eecc85bd94ab6ada1ff9e057ba1b..27845c014304ecd4867b876ecfc0463e2773aeb8 100644 (file)
@@ -927,7 +927,11 @@ _loop_vec_info::~_loop_vec_info ()
   delete scan_map;
   epilogue_vinfos.release ();
 
-  loop->aux = NULL;
+  /* When we release an epiloge vinfo that we do not intend to use
+     avoid clearing AUX of the main loop which should continue to
+     point to the main loop vinfo since otherwise we'll leak that.  */
+  if (loop->aux == this)
+    loop->aux = NULL;
 }
 
 /* Return an invariant or register for EXPR and emit necessary