2020-02-14 22:02:29 +08:00
|
|
|
! RUN: %S/test_errors.sh %s %flang %t
|
2019-07-03 03:10:09 +08:00
|
|
|
! Tests for C1128:
|
|
|
|
! A variable-name that appears in a LOCAL or LOCAL_INIT locality-spec shall not
|
|
|
|
! have the ALLOCATABLE; INTENT (IN); or OPTIONAL attribute; shall not be of
|
|
|
|
! finalizable type; shall not be a nonpointer polymorphic dummy argument; and
|
|
|
|
! shall not be a coarray or an assumed-size array.
|
|
|
|
|
|
|
|
subroutine s1()
|
|
|
|
! Cannot have ALLOCATABLE variable in a locality spec
|
|
|
|
integer, allocatable :: k
|
|
|
|
!ERROR: ALLOCATABLE variable 'k' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(k)
|
|
|
|
end do
|
|
|
|
end subroutine s1
|
|
|
|
|
|
|
|
subroutine s2(arg)
|
|
|
|
! Cannot have a dummy OPTIONAL in a locality spec
|
|
|
|
integer, optional :: arg
|
|
|
|
!ERROR: OPTIONAL argument 'arg' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(arg)
|
|
|
|
end do
|
|
|
|
end subroutine s2
|
|
|
|
|
|
|
|
subroutine s3(arg)
|
|
|
|
! This is OK
|
|
|
|
real :: arg
|
|
|
|
do concurrent(i=1:5) local(arg)
|
|
|
|
end do
|
|
|
|
end subroutine s3
|
|
|
|
|
|
|
|
subroutine s4(arg)
|
|
|
|
! Cannot have a dummy INTENT(IN) in a locality spec
|
|
|
|
real, intent(in) :: arg
|
|
|
|
!ERROR: INTENT IN argument 'arg' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(arg)
|
|
|
|
end do
|
|
|
|
end subroutine s4
|
|
|
|
|
|
|
|
subroutine s5()
|
|
|
|
! Cannot have a variable of a finalizable type in a locality spec
|
|
|
|
type t1
|
|
|
|
integer :: i
|
|
|
|
contains
|
|
|
|
final :: f
|
|
|
|
end type t1
|
|
|
|
|
|
|
|
type(t1) :: var
|
|
|
|
|
|
|
|
!ERROR: Finalizable variable 'var' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(var)
|
|
|
|
end do
|
|
|
|
|
|
|
|
contains
|
|
|
|
subroutine f(x)
|
|
|
|
type(t1) :: x
|
|
|
|
end subroutine f
|
|
|
|
end subroutine s5
|
|
|
|
|
|
|
|
subroutine s6
|
|
|
|
! Cannot have a nonpointer polymorphic dummy argument in a locality spec
|
|
|
|
type :: t
|
|
|
|
integer :: field
|
|
|
|
end type t
|
|
|
|
contains
|
|
|
|
subroutine s(x, y)
|
|
|
|
class(t), pointer :: x
|
|
|
|
class(t) :: y
|
|
|
|
|
|
|
|
! This is allowed
|
|
|
|
do concurrent(i=1:5) local(x)
|
|
|
|
end do
|
|
|
|
|
|
|
|
! This is not allowed
|
|
|
|
!ERROR: Nonpointer polymorphic argument 'y' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(y)
|
|
|
|
end do
|
|
|
|
end subroutine s
|
|
|
|
end subroutine s6
|
|
|
|
|
|
|
|
subroutine s7()
|
|
|
|
! Cannot have a coarray
|
|
|
|
integer, codimension[*] :: coarray_var
|
|
|
|
!ERROR: Coarray 'coarray_var' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(coarray_var)
|
|
|
|
end do
|
|
|
|
end subroutine s7
|
|
|
|
|
|
|
|
subroutine s8(arg)
|
|
|
|
! Cannot have an assumed size array
|
|
|
|
integer, dimension(*) :: arg
|
|
|
|
!ERROR: Assumed size array 'arg' not allowed in a locality-spec
|
|
|
|
do concurrent(i=1:5) local(arg)
|
|
|
|
end do
|
|
|
|
end subroutine s8
|