blob: 6b76265bd96f928f46b453ebdb74846fc374abd4 [file] [edit]
! The predefined identifiers omp_initial_device (-1) and omp_invalid_device
! (-2) from the OpenMP 5.2+ specification must be accepted as valid device
! numbers in the DEVICE clause of target constructs.
! REQUIRES: openmp_runtime
! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=52
! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=60
program main
use omp_lib
real(8) :: arrayA(256)
integer :: N, dev
arrayA = 1.414d0
N = 256
! Literal values allowed by the OpenMP 5.2 / 6.0 specification.
!$omp target device(-1)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
!$omp target device(-2)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
!$omp target device(0)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
! Using the predefined identifiers from the omp_lib module.
!$omp target device(omp_initial_device)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
!$omp target device(omp_invalid_device)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
! Also accepted on target data and its data motion variants.
!$omp target data map(to: arrayA) device(omp_initial_device)
!$omp end target data
!$omp target data map(to: arrayA) device(omp_invalid_device)
!$omp end target data
!$omp target enter data map(alloc: arrayA) device(omp_initial_device)
!$omp target enter data map(alloc: arrayA) device(omp_invalid_device)
!$omp target exit data map(delete: arrayA) device(omp_initial_device)
!$omp target exit data map(delete: arrayA) device(omp_invalid_device)
!$omp target update to(arrayA) device(omp_initial_device)
!$omp target update to(arrayA) device(omp_invalid_device)
! Runtime-determined values pass the semantic check.
dev = -1
!$omp target device(dev)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
! Values below -2 are still rejected.
!ERROR: The device expression of the DEVICE clause must be a non-negative integer expression, 'omp_initial_device' (-1), or 'omp_invalid_device' (-2)
!$omp target device(-3)
do i = 1, N
arrayA(i) = 3.14d0
enddo
!$omp end target
end program main