aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2010-07-25 17:01:15 +0000
committerMikael Morin <mikael@gcc.gnu.org>2010-07-25 17:01:15 +0000
commit31fee91edf762ff41ab637698c855cb201e4e6cb (patch)
tree741b2b6a14d8e50c49bfb3012ae66b8c5847a4ae /gcc/fortran/parse.c
parent20b84bef2b603adfc1a079de6575021c3529077f (diff)
downloadgcc-31fee91edf762ff41ab637698c855cb201e4e6cb.zip
gcc-31fee91edf762ff41ab637698c855cb201e4e6cb.tar.gz
gcc-31fee91edf762ff41ab637698c855cb201e4e6cb.tar.bz2
re PR fortran/44660 (ICE in resolve_equivalence())
2010-07-25 Mikael Morin <mikael@gcc.gnu.org> PR fortran/44660 * gfortran.h (gfc_namespace): New field old_equiv. (gfc_free_equiv_until): New prototype. * match.c (gfc_free_equiv_until): New, renamed from gfc_free_equiv with a parameterized stop condition. (gfc_free_equiv): Use gfc_free_equiv_until. * parse.c (next_statement): Save equivalence list. (reject_statement): Restore equivalence list. From-SVN: r162516
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r--gcc/fortran/parse.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 616fb50..1575b2b 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -892,6 +892,7 @@ next_statement (void)
gfc_new_block = NULL;
gfc_current_ns->old_cl_list = gfc_current_ns->cl_list;
+ gfc_current_ns->old_equiv = gfc_current_ns->equiv;
for (;;)
{
gfc_statement_label = NULL;
@@ -1651,6 +1652,9 @@ reject_statement (void)
gfc_free_charlen (gfc_current_ns->cl_list, gfc_current_ns->old_cl_list);
gfc_current_ns->cl_list = gfc_current_ns->old_cl_list;
+ gfc_free_equiv_until (gfc_current_ns->equiv, gfc_current_ns->old_equiv);
+ gfc_current_ns->equiv = gfc_current_ns->old_equiv;
+
gfc_new_block = NULL;
gfc_undo_symbols ();
gfc_clear_warning ();