! RUN: %python %S/../test_errors.py %s %flang -fopenmp ! OpenMP Version 5.1 ! Check OpenMP construct validity for the following directives: ! 2.19.9 Ordered Construct program main integer :: i, N = 10 real :: a, arrayA(10), arrayB(10), arrayC(10) real, external :: foo, bar, baz !$omp do ordered do i = 1, N !ERROR: At most one THREADS clause can appear on the ORDERED directive !$omp ordered threads threads arrayA(i) = i !$omp end ordered end do !$omp end do !$omp simd do i = 1, N !ERROR: At most one SIMD clause can appear on the ORDERED directive !$omp ordered simd simd arrayA(i) = i !$omp end ordered end do !$omp end simd !$omp do simd ordered do i = 1, N !ERROR: At most one SIMD clause can appear on the ORDERED directive !$omp ordered simd simd arrayA(i) = i !$omp end ordered end do !$omp end do simd !$omp do ordered(1) do i = 2, N !ERROR: Only DEPEND(SOURCE) or DEPEND(SINK: vec) are allowed when ORDERED construct is a standalone construct with no ORDERED region !ERROR: At most one DEPEND(SOURCE) clause can appear on the ORDERED directive !$omp ordered depend(source) depend(inout: arrayA) depend(source) arrayA(i) = foo(i) !ERROR: DEPEND(SOURCE) is not allowed when DEPEND(SINK: vec) is present on ORDERED directive !ERROR: DEPEND(SOURCE) is not allowed when DEPEND(SINK: vec) is present on ORDERED directive !ERROR: At most one DEPEND(SOURCE) clause can appear on the ORDERED directive !$omp ordered depend(sink: i - 1) depend(source) depend(source) arrayB(i) = bar(arrayA(i), arrayB(i-1)) !ERROR: Only DEPEND(SOURCE) or DEPEND(SINK: vec) are allowed when ORDERED construct is a standalone construct with no ORDERED region !ERROR: Only DEPEND(SOURCE) or DEPEND(SINK: vec) are allowed when ORDERED construct is a standalone construct with no ORDERED region !$omp ordered depend(out: arrayC) depend(in: arrayB) arrayC(i) = baz(arrayB(i-1)) end do !$omp end do !$omp do ordered(1) do i = 2, N !ERROR: DEPEND(*) clauses are not allowed when ORDERED construct is a block construct with an ORDERED region !$omp ordered depend(source) arrayA(i) = foo(i) !$omp end ordered !ERROR: DEPEND(*) clauses are not allowed when ORDERED construct is a block construct with an ORDERED region !$omp ordered depend(sink: i - 1) arrayB(i) = bar(arrayA(i), arrayB(i-1)) !$omp end ordered end do !$omp end do contains subroutine work1() !ERROR: THREADS, SIMD clauses are not allowed when ORDERED construct is a standalone construct with no ORDERED region !$omp ordered simd end subroutine work1 subroutine work2() !ERROR: THREADS, SIMD clauses are not allowed when ORDERED construct is a standalone construct with no ORDERED region !$omp ordered threads end subroutine work2 end program main