redirect_edge_var leak.

Jan Hubicka jh@suse.cz
Thu Sep 11 11:50:00 GMT 2008


Hi,
this patch plugs redirect_edge_var memory leak.
Bootstrapped/regtested i686-linux, OK?
	* tree-ssa.c (redirect_edge_var_map_clear): Fix formatting.
	(free_var_map_entry): New function.
	(redirect_edge_var_map_destroy): Use it.
Index: tree-ssa.c
===================================================================
*** tree-ssa.c	(revision 140271)
--- tree-ssa.c	(working copy)
*************** redirect_edge_var_map_clear (edge e)
*** 112,118 ****
  void
  redirect_edge_var_map_dup (edge newe, edge olde)
  {
!   void **new_slot, **old_slot; edge_var_map_vector head;
  
    if (!edge_var_maps)
      return;
--- 112,119 ----
  void
  redirect_edge_var_map_dup (edge newe, edge olde)
  {
!   void **new_slot, **old_slot;
!   edge_var_map_vector head;
  
    if (!edge_var_maps)
      return;
*************** redirect_edge_var_map_vector (edge e)
*** 149,154 ****
--- 150,166 ----
    return (edge_var_map_vector) *slot;
  }
  
+ /* Used by redirect_edge_var_map_destroy to free all memory.  */
+ 
+ static bool
+ free_var_map_entry (const void *key ATTRIBUTE_UNUSED,
+ 		    void **value,
+ 		    void *data ATTRIBUTE_UNUSED)
+ {
+   edge_var_map_vector head = (edge_var_map_vector) *value;
+   VEC_free (edge_var_map, heap, head);
+   return true;
+ }
  
  /* Clear the edge variable mappings.  */
  
*************** redirect_edge_var_map_destroy (void)
*** 157,162 ****
--- 169,175 ----
  {
    if (edge_var_maps)
      {
+       pointer_map_traverse (edge_var_maps, free_var_map_entry, NULL);
        pointer_map_destroy (edge_var_maps);
        edge_var_maps = NULL;
      }



More information about the Gcc-patches mailing list