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