diff options
author | Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de> | 2004-10-04 23:05:07 +0200 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2004-10-04 23:05:07 +0200 |
commit | 73a014b5498d4d6ea86796cca4a97973c9a847cd (patch) | |
tree | d335cf59454e85ebc15fc722bd176f05fc361eff /gcc/fortran | |
parent | 95638988cb96e12a6472bfdde500fa5105d7c251 (diff) | |
download | gcc-73a014b5498d4d6ea86796cca4a97973c9a847cd.zip gcc-73a014b5498d4d6ea86796cca4a97973c9a847cd.tar.gz gcc-73a014b5498d4d6ea86796cca4a97973c9a847cd.tar.bz2 |
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
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/fortran/parse.c | 9 |
2 files changed, 20 insertions, 2 deletions
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 <schnetter@aei.mpg.de> * 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; |