redirect_edge_var leak.

Richard Guenther richard.guenther@gmail.com
Thu Sep 11 12:17:00 GMT 2008


On Thu, Sep 11, 2008 at 1:42 PM, Jan Hubicka <jh@suse.cz> wrote:
> Hi,
> this patch plugs redirect_edge_var memory leak.
> Bootstrapped/regtested i686-linux, OK?

Ok.

Thanks,
Richard.

>        * 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