| ! 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 | |
| subroutine sub1() | |
| integer :: i, j, N = 10 | |
| real :: arrayA(10), arrayB(10) | |
| real, external :: foo, bar | |
| !$omp do ordered(1) | |
| do i = 1, N | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end do | |
| !$omp do ordered(1) | |
| do i = 1, N | |
| !$omp target | |
| do j = 1, N | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end target | |
| end do | |
| !$omp end do | |
| !$omp target | |
| !$omp parallel do ordered(1) | |
| do i = 1, N | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end parallel do | |
| !$omp end target | |
| !$omp target parallel do ordered(1) | |
| do i = 1, N | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end target parallel do | |
| !ERROR: ORDERED clause is not allowed on a compound directive with DISTRIBUTE as a constituent | |
| !$omp target teams distribute parallel do ordered(1) | |
| do i = 1, N | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end target teams distribute parallel do | |
| !$omp do ordered | |
| do i = 1, N | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end do | |
| !$omp parallel do ordered | |
| do i = 1, N | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end parallel do | |
| !$omp target parallel do ordered | |
| do i = 1, N | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(source) | |
| arrayA(i) = foo(i) | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(sink: i - 1) | |
| arrayB(i) = bar(i - 1) | |
| end do | |
| !$omp end target parallel do | |
| !$omp do ordered(1) | |
| do i = 1, N | |
| !ERROR: The number of variables in the SINK iteration vector does not match the parameter specified in ORDERED clause | |
| !ERROR: The iteration vector element 'j' is not an induction variable within the ORDERED loop nest | |
| !$omp ordered depend(sink: i - 1) depend(sink: i - 1, j) | |
| arrayB(i) = bar(i - 1, j) | |
| end do | |
| !$omp end do | |
| !$omp do ordered(2) | |
| do i = 1, N | |
| do j = 1, N | |
| !ERROR: The number of variables in the SINK iteration vector does not match the parameter specified in ORDERED clause | |
| !$omp ordered depend(sink: i - 1) depend(sink: i - 1, j) | |
| arrayB(i) = foo(i - 1) + bar(i - 1, j) | |
| end do | |
| end do | |
| !$omp end do | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !$omp ordered depend(source) | |
| !ERROR: An ORDERED construct with the DEPEND clause must be closely nested in a worksharing-loop (or parallel worksharing-loop) construct with ORDERED clause with a parameter | |
| !ERROR: The iteration vector element 'i' is not an induction variable within the ORDERED loop nest | |
| !$omp ordered depend(sink: i - 1) | |
| !$omp do ordered(1) | |
| do i = 1, N | |
| !ERROR: THREADS clause is not allowed on ORDERED (standalone) directive | |
| !ERROR: THREADS and SIMD clauses are not allowed when ORDERED construct is a standalone construct with no ORDERED region | |
| !$omp ordered depend(source) threads | |
| arrayA(i) = i | |
| end do | |
| !$omp end do | |
| end |