Add support for the following options: * -fopenmp * -fopenacc Update OpenMP and OpenACC semantics tests to use the new driver if it is built, otherwise use f18. OpenMP tests that include `use omp_lib` or run `test_symbols.sh` have not been updated as they require options `-intrinsic-module-directory` and `-funparse-with-symbols` which are currently not implemented in the new driver. Similarly OpenACC tests that run `test_symbols.sh` have not been updated. This patch also moves semanticsContext to CompilerInvocation and creates it in CompilerInvocation#setSemanticsOpts so that the semantics context can use Fortran::parser::Options#features. Summary of changes: - Move semanticsContext to CompilerInvocation.h - Update OpenMP and OpenACC semantics tests that do not rely on `-intrinsic-module-directory` and `-funparse-with-symbols` to use %flang Differential Revision: https://reviews.llvm.org/D96032
80 lines
1.9 KiB
Fortran
80 lines
1.9 KiB
Fortran
! RUN: %S/../test_errors.sh %s %t %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
|
|
|
|
!ERROR: At least one of GANG, SEQ, VECTOR, WORKER clause must appear on the ROUTINE directive
|
|
!$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
|
|
|
|
!ERROR: No function or subroutine declared for 'dummy'
|
|
!$acc routine(dummy) seq
|
|
|
|
contains
|
|
|
|
subroutine sub1(a)
|
|
real :: a(:)
|
|
!ERROR: At least one of GANG, SEQ, VECTOR, WORKER clause must appear on the ROUTINE directive
|
|
!$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(:)
|
|
!ERROR: No function or subroutine declared for 'dummy_sub'
|
|
!$acc routine seq bind(dummy_sub)
|
|
end subroutine sub6
|
|
|
|
end module openacc_routine_validity
|