aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2016-12-08 21:26:11 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2016-12-08 21:26:11 +0000
commitd0803c0cf815ee85711cd36f5d429f784ec6ac26 (patch)
tree0dcf60be34df4e190072841358f65e1621e21e6c /gcc/fortran/parse.c
parent7e964f49026322eb357412e38ba98e14325ca80c (diff)
downloadgcc-d0803c0cf815ee85711cd36f5d429f784ec6ac26.zip
gcc-d0803c0cf815ee85711cd36f5d429f784ec6ac26.tar.gz
gcc-d0803c0cf815ee85711cd36f5d429f784ec6ac26.tar.bz2
re PR fortran/65173 (ICE while compiling wrong code)
2016-12-07 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/65173 PR fortran/69064 PR fortran/69859 PR fortran/78350 * gfortran.h (gfc_namespace): Remove old_cl_list member. * parse.c (use_modules, next_statement): old_cl_list is gone. (clear_default_charlen): Remove no longer used function. (reject_statement): Do not try ot clean up gfc_charlen structure(s) that may have been added to a cl_list list. * symbol.c (gfc_new_charlen): old_cl_list structure is gone. 2016-12-07 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/65173 PR fortran/69064 PR fortran/69859 PR fortran/78350 * gfortran.dg/misplaced_implicit_character.f90: Adjust errors. * gfortran.dg/charlen_01.f90: New test. * gfortran.dg/charlen_02.f90: Ditto. * gfortran.dg/charlen_03.f90: Ditto. * gfortran.dg/charlen_04.f90: Ditto. * gfortran.dg/charlen_05.f90: Ditto. * gfortran.dg/charlen_06.f90: Ditto. * gfortran.dg/charlen_07.f90: Ditto. * gfortran.dg/charlen_08.f90: Ditto. * gfortran.dg/charlen_09.f90: Ditto. * gfortran.dg/charlen_10.f90: Ditto. * gfortran.dg/charlen_11.f90: Ditto. * gfortran.dg/charlen_12.f90: Ditto. * gfortran.dg/charlen_13.f90: Ditto. * gfortran.dg/charlen_14.f90: Ditto. * gfortran.dg/charlen_15.f90: Ditto. * gfortran.dg/charlen_16.f90: Ditto. From-SVN: r243463
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r--gcc/fortran/parse.c36
1 files changed, 3 insertions, 33 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index ec1d0d6..b72863a 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -116,7 +116,6 @@ use_modules (void)
gfc_pop_error (&old_error);
gfc_commit_symbols ();
gfc_warning_check ();
- gfc_current_ns->old_cl_list = gfc_current_ns->cl_list;
gfc_current_ns->old_equiv = gfc_current_ns->equiv;
gfc_current_ns->old_data = gfc_current_ns->data;
last_was_use_stmt = false;
@@ -1386,7 +1385,6 @@ 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;
gfc_current_ns->old_data = gfc_current_ns->data;
for (;;)
@@ -2483,41 +2481,13 @@ accept_statement (gfc_statement st)
}
-/* Clear default character types with charlen pointers that are about
- to become invalid. */
-
-static void
-clear_default_charlen (gfc_namespace *ns, const gfc_charlen *cl,
- const gfc_charlen *end)
-{
- gfc_typespec *ts;
-
- for (ts = &ns->default_type[0]; ts < &ns->default_type[GFC_LETTERS]; ts++)
- if (ts->type == BT_CHARACTER)
- {
- const gfc_charlen *cl2;
- for (cl2 = cl; cl2 != end; cl2 = cl2->next)
- if (ts->u.cl == cl2)
- {
- ts->u.cl = NULL;
- ts->type = BT_UNKNOWN;
- break;
- }
- }
-}
-
-/* Undo anything tentative that has been built for the current
- statement. */
+/* Undo anything tentative that has been built for the current statement,
+ except if a gfc_charlen structure has been added to current namespace's
+ list of gfc_charlen structure. */
static void
reject_statement (void)
{
- /* Revert to the previous charlen chain. */
- clear_default_charlen (gfc_current_ns,
- gfc_current_ns->cl_list, gfc_current_ns->old_cl_list);
- 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;