OSDN Git Service

2010-06-25 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Jun 2010 19:02:47 +0000 (19:02 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Jun 2010 19:02:47 +0000 (19:02 +0000)
        * decl.c (gfc_match_entry): Allow END besides
        END SUBROUTINE/END FUNCTION for contained procedures.

2010-06-25  Tobias Burnus  <burnus@net-b.de>

        * gfortran.dg/end_subroutine_1.f90: New.
        * gfortran.dg/end_subroutine_2.f90: New.
        * gfortran.dg/interface_proc_end.f90: Update.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161406 138bc75d-0d04-0410-961f-82ee72b054a4

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

index b635aec..b3da9a3 100644 (file)
@@ -1,5 +1,10 @@
 2010-06-25  Tobias Burnus  <burnus@net-b.de>
 
+       * decl.c (gfc_match_entry): Allow END besides
+       END SUBROUTINE/END FUNCTION for contained procedures.
+
+2010-06-25  Tobias Burnus  <burnus@net-b.de>
+
        * parse.c (next_free, next_fixed): Allow ";" as first character.
 
 2010-06-24  Tobias Burnus  <burnus@net-b.de>
index aa7a266..73bc81c 100644 (file)
@@ -5642,7 +5642,14 @@ gfc_match_end (gfc_statement *st)
 
   if (gfc_match_eos () == MATCH_YES)
     {
-      if (!eos_ok)
+      if (!eos_ok && (*st == ST_END_SUBROUTINE || *st == ST_END_FUNCTION))
+       {
+         if (gfc_notify_std (GFC_STD_F2008, "Fortran 2008: END statement "
+                             "instead of %s statement at %L",
+                             gfc_ascii_statement (*st), &old_loc) == FAILURE)
+           goto cleanup;
+       }
+      else if (!eos_ok)
        {
          /* We would have required END [something].  */
          gfc_error ("%s statement expected at %L",
index 85cb46b..b71f778 100644 (file)
@@ -1,5 +1,11 @@
 2010-06-25  Tobias Burnus  <burnus@net-b.de>
 
+       * gfortran.dg/end_subroutine_1.f90: New.
+       * gfortran.dg/end_subroutine_2.f90: New.
+       * gfortran.dg/interface_proc_end.f90: Update.
+
+2010-06-25  Tobias Burnus  <burnus@net-b.de>
+
        * gfortran.dg/semicolon_fixed.f: Update.
        * gfortran.dg/semicolon_fixed_2.f: New.
        * gfortran.dg/semicolon_free_2.f90: New.
diff --git a/gcc/testsuite/gfortran.dg/end_subroutine_1.f90 b/gcc/testsuite/gfortran.dg/end_subroutine_1.f90
new file mode 100644 (file)
index 0000000..b42f950
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! { dg-options "-std=f2008" }
+!
+interface
+  subroutine foo()
+  end 
+  integer function bar()
+  end 
+end interface
+contains
+  subroutine test()
+  end
+  integer function f()
+    f = 42
+  end
+end
diff --git a/gcc/testsuite/gfortran.dg/end_subroutine_2.f90 b/gcc/testsuite/gfortran.dg/end_subroutine_2.f90
new file mode 100644 (file)
index 0000000..8f2e3d1
--- /dev/null
@@ -0,0 +1,24 @@
+! { dg-do compile }
+! { dg-options "-std=f2003" }
+!
+program main
+interface
+  subroutine foo()
+  end 
+  integer function bar()
+  end 
+end interface
+contains
+  subroutine test()
+  end ! { dg-error "Fortran 2008: END statement instead of END SUBROUTINE" }
+  end subroutine  ! To silence successive errors
+end program
+
+subroutine test2()
+contains
+  integer function f()
+    f = 42
+  end ! { dg-error "Fortran 2008: END statement instead of END FUNCTION" }
+  end function  ! To silence successive errors
+end subroutine test2
+
index ab95b79..2fc9921 100644 (file)
@@ -14,6 +14,5 @@
             REAL  ::  TLS1,TLS2
             END ! OK
       END INTERFACE
-      end ! { dg-error "END SUBROUTINE statement" }
-      end module ! { dg-error "END SUBROUTINE statement" }
-! { dg-error "Unexpected end of file" "" { target "*-*-*" } 0 }
+      end subroutine
+      end module