re PR fortran/33375 (ICE (segfault) gfortran.dg/common_6.f90)

2008-01-17  H.J. Lu  <hongjiu.lu@intel.com>

	PR fortran/33375
	* symbol.c (free_common_tree): Renamed to ...
	(gfc_free_common_tree): This.  Remove static.
	(gfc_free_namespace): Updated.

	* gfortran.h (gfc_free_common_tree): New.

	* match.c (gfc_match_common): Call gfc_free_common_tree () with
	gfc_current_ns->common_root and set gfc_current_ns->common_root
	to NULL on syntax error.

From-SVN: r131621
This commit is contained in:
H.J. Lu 2008-01-18 01:29:11 +00:00 committed by H.J. Lu
parent 5cc5439e27
commit c018444469
4 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,16 @@
2008-01-17 H.J. Lu <hongjiu.lu@intel.com>
PR fortran/33375
* symbol.c (free_common_tree): Renamed to ...
(gfc_free_common_tree): This. Remove static.
(gfc_free_namespace): Updated.
* gfortran.h (gfc_free_common_tree): New.
* match.c (gfc_match_common): Call gfc_free_common_tree () with
gfc_current_ns->common_root and set gfc_current_ns->common_root
to NULL on syntax error.
2008-01-18 Richard Sandiford <rsandifo@nildram.co.uk>
PR fortran/34686

View File

@ -2137,6 +2137,7 @@ int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *);
void gfc_undo_symbols (void);
void gfc_commit_symbols (void);
void gfc_commit_symbol (gfc_symbol *);
void gfc_free_common_tree (gfc_symtree *);
void gfc_free_namespace (gfc_namespace *);
void gfc_symbol_init_2 (void);

View File

@ -2951,6 +2951,8 @@ done:
return MATCH_YES;
syntax:
gfc_free_common_tree (gfc_current_ns->common_root);
gfc_current_ns->common_root = NULL;
gfc_syntax_error (ST_COMMON);
cleanup:

View File

@ -2726,14 +2726,14 @@ gfc_commit_symbol (gfc_symbol *sym)
/* Recursive function that deletes an entire tree and all the common
head structures it points to. */
static void
free_common_tree (gfc_symtree * common_tree)
void
gfc_free_common_tree (gfc_symtree * common_tree)
{
if (common_tree == NULL)
return;
free_common_tree (common_tree->left);
free_common_tree (common_tree->right);
gfc_free_common_tree (common_tree->left);
gfc_free_common_tree (common_tree->right);
gfc_free (common_tree);
}
@ -2863,7 +2863,7 @@ gfc_free_namespace (gfc_namespace *ns)
free_sym_tree (ns->sym_root);
free_uop_tree (ns->uop_root);
free_common_tree (ns->common_root);
gfc_free_common_tree (ns->common_root);
for (cl = ns->cl_list; cl; cl = cl2)
{