aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>2004-06-12 17:02:01 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2004-06-12 17:02:01 +0200
commitc52eae8de072141afe6620df1ccd2803f86771ff (patch)
tree3442eed468d0f98cb9db165e1fa5cadb8abaed78 /gcc
parenta13c75880a4f9da78ef498f8cf7f006b314aa35c (diff)
downloadgcc-c52eae8de072141afe6620df1ccd2803f86771ff.zip
gcc-c52eae8de072141afe6620df1ccd2803f86771ff.tar.gz
gcc-c52eae8de072141afe6620df1ccd2803f86771ff.tar.bz2
re PR fortran/14957 (testsuite issues)
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. From-SVN: r83031
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/decl.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f904
4 files changed, 20 insertions, 3 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",
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1196f71..733a53c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f90 b/gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f90
index f839c8e..6342e1a 100644
--- a/gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f90
+++ b/gcc/testsuite/gfortran.fortran-torture/execute/stack_varsize.f90
@@ -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