diff options
Diffstat (limited to 'gcc/fortran')
| -rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/fortran/decl.c | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e7b63f7..a823c8a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2004-06-12 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> + PR fortran/14957 + * decl.c (gfc_match_end): Require END {SUBROUTINE|FUNCTION} for + contained procedure. + +2004-06-12 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> + PR fortran/12841 * interface.c (compare_parameter, compare_actual_formal): Don't check types and array shapes for NULL() diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 69b1cfd..c6b8073 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1875,10 +1875,15 @@ gfc_match_end (gfc_statement * st) if (gfc_match_eos () == MATCH_YES) { + state = gfc_current_state (); if (*st == ST_ENDIF || *st == ST_ENDDO || *st == ST_END_SELECT || *st == ST_END_INTERFACE || *st == ST_END_FORALL - || *st == ST_END_WHERE) + || *st == ST_END_WHERE + || /* A contained procedure requires END FUNCTION/SUBROUTINE. */ + ((state == COMP_FUNCTION || state == COMP_SUBROUTINE) + && gfc_state_stack->previous != NULL + && gfc_state_stack->previous->state == COMP_CONTAINS)) { gfc_error ("%s statement expected at %C", |
