summaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authortobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-12 15:02:01 +0000
committertobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-12 15:02:01 +0000
commit62e97d99da2b67312f5a5303091d359bf391fa7f (patch)
tree3442eed468d0f98cb9db165e1fa5cadb8abaed78 /gcc/fortran
parent09714a6b1a2e432f2654cb7b9b544c34f62bf986 (diff)
downloadgcc-62e97d99da2b67312f5a5303091d359bf391fa7f.tar.gz
fortran/
PR fortran/14957 * decl.c (gfc_match_end): Require END {SUBROUTINE|FUNCTION} for contained procedure. testsuite/ PR fortran/14957 * gfortran.fortran-torture/execute/stack_varsize.f90: Correct syntax errors in end statements of contained subroutines. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83031 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/decl.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e7b63f7e2a9..a823c8a2a59 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 69b1cfdb5c3..c6b8073edd5 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",