We already accept assignments of INTEGER to LOGICAL (& vice versa) as an extension, but not initialization. Extend initialization to cover those cases. (Also fix misspelling in nearby comment as suggested by code reviewer.) Decouple an inadvertent dependence cycle by moving two one-line function definitions into a header file. Differential Revision: https://reviews.llvm.org/D117159
49 lines
1.6 KiB
Fortran
49 lines
1.6 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang_fc1
|
|
! DATA statement errors
|
|
subroutine s1
|
|
type :: t1
|
|
integer :: j = 666
|
|
end type t1
|
|
type(t1) :: t1x
|
|
!ERROR: Default-initialized 't1x' must not be initialized in a DATA statement
|
|
data t1x%j / 777 /
|
|
integer :: ja = 888
|
|
!ERROR: Default-initialized 'ja' must not be initialized in a DATA statement
|
|
data ja / 999 /
|
|
integer :: a1(10)
|
|
!ERROR: DATA statement set has more values than objects
|
|
data a1(1:9:2) / 6 * 1 /
|
|
integer :: a2(10)
|
|
!ERROR: DATA statement set has no value for 'a2(2_8)'
|
|
data (a2(k),k=10,1,-2) / 4 * 1 /
|
|
integer :: a3(2)
|
|
!ERROR: DATA statement implied DO loop has a step value of zero
|
|
data (a3(j),j=1,2,0)/2*333/
|
|
integer :: a4(3)
|
|
!ERROR: DATA statement designator 'a4(5_8)' is out of range
|
|
data (a4(j),j=1,5,2) /3*222/
|
|
interface
|
|
real function rfunc(x)
|
|
real, intent(in) :: x
|
|
end function
|
|
end interface
|
|
real, pointer :: rp
|
|
!ERROR: Procedure 'rfunc' may not be used to initialize 'rp', which is not a procedure pointer
|
|
data rp/rfunc/
|
|
procedure(rfunc), pointer :: rpp
|
|
real, target :: rt
|
|
!ERROR: Data object 'rt' may not be used to initialize 'rpp', which is a procedure pointer
|
|
data rpp/rt/
|
|
!ERROR: Initializer for 'rt' must not be a pointer
|
|
data rt/null()/
|
|
!ERROR: Initializer for 'rt' must not be a procedure
|
|
data rt/rfunc/
|
|
integer :: jx, jy
|
|
!WARNING: DATA statement value initializes 'jx' of type 'INTEGER(4)' with CHARACTER
|
|
data jx/'abc'/
|
|
!ERROR: DATA statement value could not be converted to the type 'INTEGER(4)' of the object 'jx'
|
|
data jx/t1()/
|
|
!ERROR: DATA statement value 'jy' for 'jx' is not a constant
|
|
data jx/jy/
|
|
end subroutine
|