Commit 9efc0826 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/44350 (accepts illegal fortran in BLOCK DATA)

2013-10-29  Tobias Burnus  <burnus@net-b.de>

        PR fortran/44350
        * parse.c (parse_spec): Add C1116 constraint
        check for BLOCK DATA.

2013-10-29  Tobias Burnus  <burnus@net-b.de>

        PR fortran/44350
        * gfortran.dg/blockdata_8.f90: New.

From-SVN: r204185
parent c8c0f557
2013-10-29 Tobias Burnus <burnus@net-b.de>
PR fortran/44350
* parse.c (parse_spec): Add C1116 constraint
check for BLOCK DATA.
2013-10-29 Paul Thomas <pault@gcc.gnu.org> 2013-10-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/58793 PR fortran/58793
......
...@@ -2628,6 +2628,33 @@ loop: ...@@ -2628,6 +2628,33 @@ loop:
default: default:
break; break;
} }
else if (gfc_current_state () == COMP_BLOCK_DATA)
/* Fortran 2008, C1116. */
switch (st)
{
case ST_DATA_DECL:
case ST_COMMON:
case ST_DATA:
case ST_TYPE:
case ST_END_BLOCK_DATA:
case ST_ATTR_DECL:
case ST_EQUIVALENCE:
case ST_PARAMETER:
case ST_IMPLICIT:
case ST_IMPLICIT_NONE:
case ST_DERIVED_DECL:
case ST_USE:
break;
case ST_NONE:
break;
default:
gfc_error ("%s statement is not allowed inside of BLOCK DATA at %C",
gfc_ascii_statement (st));
reject_statement ();
break;
}
/* If we find a statement that can not be followed by an IMPLICIT statement /* If we find a statement that can not be followed by an IMPLICIT statement
(and thus we can expect to see none any further), type the function result (and thus we can expect to see none any further), type the function result
......
2013-10-29 Tobias Burnus <burnus@net-b.de>
PR fortran/44350
* gfortran.dg/blockdata_8.f90: New.
2013-10-29 Paul Thomas <pault@gcc.gnu.org> 2013-10-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/58793 PR fortran/58793
......
! { dg-do compile }
!
! PR fortran/44350
!
! Fortran 2008, C1116 only permits a small subset of statements in BLOCK DATA
!
! Part of the test case was contributed by Vittorio Zecca
!
module m
end module m
BLOCK DATA valid2
use m
implicit integer(a-z)
intrinsic :: sin
common /one/ a, c
bind(C) :: /one/
dimension c(5)
parameter (g = 7)
END BLOCK DATA valid2
BLOCK DATA valid
use m
implicit none
type t
sequence
end type t
type(t), save :: x
integer :: y
real :: q
save :: y
dimension :: q(5)
! class(*) :: zz ! See PR fortran/58857
! pointer :: zz
target :: q
volatile y
asynchronous q
END BLOCK DATA valid
block data invalid
common x
f(x)=x ! { dg-error "STATEMENT FUNCTION statement is not allowed inside of BLOCK DATA" }
interface ! { dg-error "INTERFACE statement is not allowed inside of BLOCK DATA" }
end interface
1 format() ! { dg-error "FORMAT statement is not allowed inside of BLOCK DATA" }
end block invalid ! { dg-error "Expecting END BLOCK DATA statement" }
! { dg-error "Unexpected end of file" "" { target "*-*-*" } 0 }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment