gcc/fortran/ChangeLog:
* expr.cc (find_inquiry_ref): Fix memleak introduced by scanning
the reference chain to find and simplify inquiry references.
* symbol.cc (gfc_copy_formal_args_intr): Free formal namespace
when not needed to avoid a front-end memleak.
{
gfc_ref *ref;
gfc_ref *inquiry = NULL;
+ gfc_ref *inquiry_head;
gfc_expr *tmp;
tmp = gfc_copy_expr (p);
return false;
}
+ inquiry_head = inquiry;
gfc_resolve_expr (tmp);
/* Leave these to the backend since the type and kind is not confirmed until
mpc_imagref (tmp->value.complex), GFC_RND_MODE);
break;
}
- // TODO: Fix leaking expr tmp, when simplify is done twice.
+
if (inquiry->next)
gfc_replace_expr (tmp, *newp);
}
}
gfc_free_expr (tmp);
+ gfc_free_ref_list (inquiry_head);
return true;
cleanup:
gfc_free_expr (tmp);
+ gfc_free_ref_list (inquiry_head);
return false;
}
if (dest->formal != NULL)
/* The current ns should be that for the dest proc. */
dest->formal_ns = gfc_current_ns;
+ else
+ gfc_free_namespace (gfc_current_ns);
/* Restore the current namespace to what it was on entry. */
gfc_current_ns = parent_ns;
}