]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/34763 (bare END not allowed in an interface block in a module procedure)
authorTobias Burnus <burnus@net-b.de>
Sun, 13 Jan 2008 21:29:49 +0000 (22:29 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Sun, 13 Jan 2008 21:29:49 +0000 (22:29 +0100)
2008-01-13  Tobias Burnus  <burnus@net-b.de>

        PR fortran/34763
        * decl.c (contained_procedure): Only check directly preceeding
        * state.

2008-01-13  Tobias Burnus  <burnus@net-b.de>

        PR fortran/34763
        * gfortran.dg/interface_proc_end.f90: New.

From-SVN: r131512

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/interface_proc_end.f90 [new file with mode: 0644]

index 5f94e76b0462b560aa329f76ceac560033e3785d..683d66bbf913b17fadb79b670006a76f736883ee 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-13  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34763
+       * decl.c (contained_procedure): Only check directly preceeding state.
+
 2008-01-13  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/34759
index dd8eb35ae6b5e456e23522344f80cf8bffa33963..74d096267bc18c1db983e3ce1192fff8bc6a9d36 100644 (file)
@@ -4870,12 +4870,11 @@ gfc_match_bind_c (gfc_symbol *sym, bool allow_binding_name)
 static int
 contained_procedure (void)
 {
-  gfc_state_data *s;
+  gfc_state_data *s = gfc_state_stack;
 
-  for (s=gfc_state_stack; s; s=s->previous)
-    if ((s->state == COMP_SUBROUTINE || s->state == COMP_FUNCTION)
-       && s->previous != NULL && s->previous->state == COMP_CONTAINS)
-      return 1;
+  if ((s->state == COMP_SUBROUTINE || s->state == COMP_FUNCTION)
+      && s->previous != NULL && s->previous->state == COMP_CONTAINS)
+    return 1;
 
   return 0;
 }
index 98557e6043f0207a4ba565679f22b8d5acc49679..09b233e064403a9cfccf95d1122f1db54dc7ec74 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-13  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/34763
+       * gfortran.dg/interface_proc_end.f90: New.
+
 2008-01-13  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/34759
diff --git a/gcc/testsuite/gfortran.dg/interface_proc_end.f90 b/gcc/testsuite/gfortran.dg/interface_proc_end.f90
new file mode 100644 (file)
index 0000000..d037de6
--- /dev/null
@@ -0,0 +1,19 @@
+! { dg-do compile}
+!
+! PR fortran/34763
+! Before, gfortran did not allow for the "END" in
+! the interface, which is no module procedure.
+!
+! Test case contributed by Dick Hendrickson
+!
+      module n
+      contains
+      subroutine n_interface
+      INTERFACE
+            SUBROUTINE NGSXDY(TLS1,TLS2)
+            REAL  ::  TLS1,TLS2
+            END ! OK
+      END INTERFACE
+      end ! { dg-error "END SUBROUTINE statement" }
+      end module ! { dg-error "END SUBROUTINE statement" }
+! { dg-excess-errors "Unexpected end of file" }