diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2010-07-25 17:01:15 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2010-07-25 17:01:15 +0000 |
commit | 31fee91edf762ff41ab637698c855cb201e4e6cb (patch) | |
tree | 741b2b6a14d8e50c49bfb3012ae66b8c5847a4ae /gcc/fortran/parse.c | |
parent | 20b84bef2b603adfc1a079de6575021c3529077f (diff) | |
download | gcc-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.c | 4 |
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 (); |