This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix more leaks


This fixes a few more heap leaks.

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

Richard.

2012-08-21  Richard Guenther  <rguenther@suse.de>

	* tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free
	the affine expansion cache.
	* tree-ssa-dom.c (free_expr_hash_elt_contents): New function,
	split out from ...
	(free_expr_hash_elt): ... this one.
	(record_cond): Properly free a not needed hashtable element.
	(lookup_avail_expr): Likewise.
	* tree-into-ssa.c (init_ssa_renamer): Specify a free function
	for the var_infos hashtable.
	(update_ssa): Likewise.

Index: gcc/tree-ssa-loop-im.c
===================================================================
*** gcc/tree-ssa-loop-im.c	(revision 190533)
--- gcc/tree-ssa-loop-im.c	(working copy)
*************** tree_ssa_lim_finalize (void)
*** 2634,2640 ****
    VEC_free (bitmap, heap, memory_accesses.all_refs_stored_in_loop);
  
    if (memory_accesses.ttae_cache)
!     pointer_map_destroy (memory_accesses.ttae_cache);
  }
  
  /* Moves invariants from loops.  Only "expensive" invariants are moved out --
--- 2634,2640 ----
    VEC_free (bitmap, heap, memory_accesses.all_refs_stored_in_loop);
  
    if (memory_accesses.ttae_cache)
!     free_affine_expand_cache (&memory_accesses.ttae_cache);
  }
  
  /* Moves invariants from loops.  Only "expensive" invariants are moved out --
Index: gcc/tree-ssa-dom.c
===================================================================
*** gcc/tree-ssa-dom.c	(revision 190533)
--- gcc/tree-ssa-dom.c	(working copy)
*************** print_expr_hash_elt (FILE * stream, cons
*** 649,667 ****
      }
  }
  
! /* Delete an expr_hash_elt and reclaim its storage.  */
  
  static void
! free_expr_hash_elt (void *elt)
  {
-   struct expr_hash_elt *element = ((struct expr_hash_elt *)elt);
- 
    if (element->expr.kind == EXPR_CALL)
      free (element->expr.ops.call.args);
! 
!   if (element->expr.kind == EXPR_PHI)
      free (element->expr.ops.phi.args);
  
    free (element);
  }
  
--- 649,672 ----
      }
  }
  
! /* Delete variable sized pieces of the expr_hash_elt ELEMENT.  */
  
  static void
! free_expr_hash_elt_contents (struct expr_hash_elt *element)
  {
    if (element->expr.kind == EXPR_CALL)
      free (element->expr.ops.call.args);
!   else if (element->expr.kind == EXPR_PHI)
      free (element->expr.ops.phi.args);
+ }
+ 
+ /* Delete an expr_hash_elt and reclaim its storage.  */
  
+ static void
+ free_expr_hash_elt (void *elt)
+ {
+   struct expr_hash_elt *element = ((struct expr_hash_elt *)elt);
+   free_expr_hash_elt_contents (element);
    free (element);
  }
  
*************** lookup_avail_expr (gimple stmt, bool ins
*** 2404,2412 ****
    slot = htab_find_slot_with_hash (avail_exprs, &element, element.hash,
  				   (insert ? INSERT : NO_INSERT));
    if (slot == NULL)
!     return NULL_TREE;
! 
!   if (*slot == NULL)
      {
        struct expr_hash_elt *element2 = XNEW (struct expr_hash_elt);
        *element2 = element;
--- 2409,2419 ----
    slot = htab_find_slot_with_hash (avail_exprs, &element, element.hash,
  				   (insert ? INSERT : NO_INSERT));
    if (slot == NULL)
!     {
!       free_expr_hash_elt_contents (&element);
!       return NULL_TREE;
!     }
!   else if (*slot == NULL)
      {
        struct expr_hash_elt *element2 = XNEW (struct expr_hash_elt);
        *element2 = element;
*************** lookup_avail_expr (gimple stmt, bool ins
*** 2422,2427 ****
--- 2429,2436 ----
        VEC_safe_push (expr_hash_elt_t, heap, avail_exprs_stack, element2);
        return NULL_TREE;
      }
+   else
+     free_expr_hash_elt_contents (&element);
  
    /* Extract the LHS of the assignment so that it can be used as the current
       definition of another variable.  */
Index: gcc/tree-into-ssa.c
===================================================================
*** gcc/tree-into-ssa.c	(revision 190533)
--- gcc/tree-into-ssa.c	(working copy)
*************** init_ssa_renamer (void)
*** 2291,2297 ****
    /* Allocate memory for the DEF_BLOCKS hash table.  */
    gcc_assert (var_infos == NULL);
    var_infos = htab_create (VEC_length (tree, cfun->local_decls),
! 			   var_info_hash, var_info_eq, NULL);
  
    bitmap_obstack_initialize (&update_ssa_obstack);
  }
--- 2291,2297 ----
    /* Allocate memory for the DEF_BLOCKS hash table.  */
    gcc_assert (var_infos == NULL);
    var_infos = htab_create (VEC_length (tree, cfun->local_decls),
! 			   var_info_hash, var_info_eq, free);
  
    bitmap_obstack_initialize (&update_ssa_obstack);
  }
*************** update_ssa (unsigned update_flags)
*** 3170,3176 ****
      {
        /* If we rename bare symbols initialize the mapping to
           auxiliar info we need to keep track of.  */
!       var_infos = htab_create (47, var_info_hash, var_info_eq, NULL);
  
        /* If we have to rename some symbols from scratch, we need to
  	 start the process at the root of the CFG.  FIXME, it should
--- 3170,3176 ----
      {
        /* If we rename bare symbols initialize the mapping to
           auxiliar info we need to keep track of.  */
!       var_infos = htab_create (47, var_info_hash, var_info_eq, free);
  
        /* If we have to rename some symbols from scratch, we need to
  	 start the process at the root of the CFG.  FIXME, it should
Index: gcc/tree-ssa-dom.c
===================================================================
--- gcc/tree-ssa-dom.c	(revision 190529)
+++ gcc/tree-ssa-dom.c	(working copy)
@@ -1203,7 +1203,7 @@ record_cond (cond_equivalence *p)
       VEC_safe_push (expr_hash_elt_t, heap, avail_exprs_stack, element);
     }
   else
-    free (element);
+    free_expr_hash_elt (element);
 }
 
 /* Build a cond_equivalence record indicating that the comparison


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]