From 73a014b5498d4d6ea86796cca4a97973c9a847cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Schl=C3=BCter?= Date: Mon, 4 Oct 2004 23:05:07 +0200 Subject: re PR fortran/17708 (gfortran problem with goto inside loop) fortran/ PR fortran/17708 * parse.c (accept_statement): Don't treat END DO like END IF and END SELECT. (parse_do_block): Generate possible END DO label inside END DO block. also, added ChangeLog entry for previous commit. testsuite/ PR fortran/17708 * gfortran.dg/pr17708.f90: New test. From-SVN: r88529 --- gcc/fortran/ChangeLog | 13 +++++++++++++ gcc/fortran/parse.c | 9 +++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c0b6d15..249e112 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -12,6 +12,19 @@ * iresolve.c (gfc_resolve_mvbits): New function. (gfc_resolve_random_number): Remove empty line at end of function. + * trans-const.c (gfc_build_cstring_const): New function. + (gfc_init_cst): Use new function. + * trans-const.h (gfc_build_cstring_const): Add prototype. + * trans-io.c (set_string, set_error_locus): Use new function. + * trans-stmt.c (gfc_trans_goto): Use new function. + + PR fortran/17708 + * parse.c (accept_statement): Don't treat END DO like END IF and + END SELECT. + (parse_do_block): Generate possible END DO label inside END DO + block. + + 2004-10-04 Erik Schnetter * scanner.c (preprocessor_line): Accept preprocessor lines without diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index cfcbee9..6f88aba 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -1033,7 +1033,6 @@ accept_statement (gfc_statement st) construct. */ case ST_ENDIF: - case ST_ENDDO: case ST_END_SELECT: if (gfc_statement_label != NULL) { @@ -2003,7 +2002,13 @@ loop: && s.ext.end_do_label != gfc_statement_label) gfc_error_now ("Statement label in ENDDO at %C doesn't match DO label"); - /* Fall through */ + + if (gfc_statement_label != NULL) + { + new_st.op = EXEC_NOP; + add_statement (); + } + break; case ST_IMPLIED_ENDDO: break; -- cgit v1.1