The symbol in bind clause on acc routine refers to a function or a subroutine. This patch avoids to raise error when the function or subroutine is declared later in the code or is external. This is in line with normal procedure name resolution in Fortran code.
76 lines
1.6 KiB
Fortran
76 lines
1.6 KiB
Fortran
! RUN: %python %S/../test_errors.py %s %flang -fopenacc
|
|
|
|
! Check OpenACC clause validity for the following construct and directive:
|
|
! 2.15.1 routine
|
|
|
|
module openacc_routine_validity
|
|
implicit none
|
|
|
|
!$acc routine(sub3) seq
|
|
|
|
!$acc routine(fct2) vector
|
|
|
|
!$acc routine(sub3)
|
|
|
|
!ERROR: ROUTINE directive without name must appear within the specification part of a subroutine or function definition, or within an interface body for a subroutine or function in an interface block
|
|
!$acc routine seq
|
|
|
|
!$acc routine(dummy) seq
|
|
|
|
contains
|
|
|
|
subroutine sub1(a)
|
|
real :: a(:)
|
|
!$acc routine
|
|
end subroutine sub1
|
|
|
|
subroutine sub2(a)
|
|
real :: a(:)
|
|
!ERROR: Clause NOHOST is not allowed after clause DEVICE_TYPE on the ROUTINE directive
|
|
!$acc routine seq device_type(*) nohost
|
|
end subroutine sub2
|
|
|
|
subroutine sub3(a)
|
|
real :: a(:)
|
|
end subroutine sub3
|
|
|
|
subroutine sub4(a)
|
|
real :: a(:)
|
|
!$acc routine seq
|
|
end subroutine sub4
|
|
|
|
subroutine sub5(a)
|
|
real :: a(:)
|
|
!$acc routine(sub5) seq
|
|
end subroutine sub5
|
|
|
|
function fct1(a)
|
|
integer :: fct1
|
|
real :: a(:)
|
|
!$acc routine vector nohost
|
|
end function fct1
|
|
|
|
function fct2(a)
|
|
integer :: fct2
|
|
real :: a(:)
|
|
end function fct2
|
|
|
|
function fct3(a)
|
|
integer :: fct3
|
|
real :: a(:)
|
|
!$acc routine seq bind(fct2)
|
|
end function fct3
|
|
|
|
function fct4(a)
|
|
integer :: fct4
|
|
real :: a(:)
|
|
!$acc routine seq bind("_fct4")
|
|
end function fct4
|
|
|
|
subroutine sub6(a)
|
|
real :: a(:)
|
|
!$acc routine seq bind(dummy_sub)
|
|
end subroutine sub6
|
|
|
|
end module openacc_routine_validity
|