OSDN Git Service

fortran/
authortobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 12 Jun 2004 15:02:01 +0000 (15:02 +0000)
committertobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 12 Jun 2004 15:02:01 +0000 (15:02 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f90

index e7b63f7..a823c8a 100644 (file)
@@ -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()
index 69b1cfd..c6b8073 100644 (file)
@@ -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",
index 1196f71..733a53c 100644 (file)
@@ -1,5 +1,11 @@
 2004-06-12  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
+       PR fortran/14957
+       * gfortran.fortran-torture/execute/stack_varsize.f90: Correct
+        syntax errors in end statements of contained subroutines. 
+       
+2004-06-12  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
+
        PR fortran/12841
        * gfortran.fortran-torture/execute/null_arg.f90: New test.
 
index f839c8e..6342e1a 100644 (file)
@@ -17,7 +17,7 @@ contains
       k = 30
       if ((a .ne. 10.0).or.(b(1) .ne. 20.0).or.(c(1) .ne. 30.0)) call abort
       if ((m .ne. 10).or.(n(256,4) .ne. 20).or.(k(1,1024) .ne. 30)) call abort
-   end     
+   end subroutine
 
    ! Local variables defined in recursive subroutine are always put on stack.
    recursive subroutine sub2 (n)
@@ -26,5 +26,5 @@ contains
       if (n .ge. 1) call sub2 (n-1)
       if (a(1) .ne. 42) call abort
       a (1) = 0
-   end
+   end subroutine
 end