decl.c (gfc_match_entry): Allow END besides END SUBROUTINE/END FUNCTION for contained procedures.

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>

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

From-SVN: r161406
This commit is contained in:
Tobias Burnus 2010-06-25 21:02:47 +02:00 committed by Tobias Burnus
parent c6c73c51ca
commit 272001a244
6 changed files with 61 additions and 4 deletions

View file

@ -1,3 +1,8 @@
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.

View 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",

View file

@ -1,3 +1,9 @@
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.

View file

@ -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

View file

@ -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

View 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