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:
parent
c6c73c51ca
commit
272001a244
6 changed files with 61 additions and 4 deletions
|
@ -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.
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.
|
||||
|
|
16
gcc/testsuite/gfortran.dg/end_subroutine_1.f90
Normal file
16
gcc/testsuite/gfortran.dg/end_subroutine_1.f90
Normal 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
|
24
gcc/testsuite/gfortran.dg/end_subroutine_2.f90
Normal file
24
gcc/testsuite/gfortran.dg/end_subroutine_2.f90
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue