! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
! Tests for the index-name of a FORALL statement
module m1
integer modVar
end module m1
program indexName
common /iCommonName/ x
type :: typeName
end type
iGlobalVar = 216
contains
subroutine hostAssoc()
integer, dimension(4) :: table
! iGlobalVar is host associated with the global variable
iGlobalVar = 1
FORALL (iGlobalVar=1:4) table(iGlobalVar) = 343
end subroutine hostAssoc
subroutine useAssoc()
use m1
integer, dimension(4) :: tab
! modVar is use associated with the module variable
FORALL (modVar=1:4) tab(modVar) = 343
end subroutine useAssoc
subroutine constructAssoc()
integer, dimension(4) :: table
integer :: localVar
associate (assocVar => localVar)
!PORTABILITY: Index variable 'assocvar' should be a scalar object or common block if it is present in the enclosing scope
FORALL (assocVar=1:4) table(assocVar) = 343
end associate
end subroutine constructAssoc
subroutine commonSub()
integer, dimension(4) :: tab
! This reference is OK
FORALL (iCommonName=1:4) tab(iCommonName) = 343
end subroutine commonSub
subroutine mismatch()
integer, dimension(4) :: table
!PORTABILITY: Index variable 'typename' should be a scalar object or common block if it is present in the enclosing scope
!ERROR: Must have INTEGER type, but is REAL(4)
!ERROR: Must have INTEGER type, but is REAL(4)
FORALL (typeName=1:4) table(typeName) = 343
end subroutine mismatch
end program indexName