| ! 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 |