mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
c8c0f5577d
commit
9efc08268f
|
|
@ -1,3 +1,9 @@
|
||||||
|
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:
|
||||||
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
! { 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 }
|
||||||
Loading…
Reference in New Issue