| ! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=50 |
| ! OpenMP 5.0: an ORDERED clause requires perfect nesting, whether or not the |
| ! clause has an argument. This is stricter than 5.1/5.2, where only ORDERED(n) |
| ! (with an argument) requires perfect nesting (see ordered-nesting-omp51.f90). |
| |
| ! Bare ORDERED with COLLAPSE(2): the two associated loops must be perfectly |
| ! nested in 5.0, so intervening code between them is an error. |
| subroutine bare_ordered_collapse_imperfect |
| integer i, j |
| |
| !ERROR: This construct requires a perfect nest of depth 2, but the associated nest is a perfect nest of depth 1 |
| !BECAUSE: COLLAPSE clause was specified with argument 2 |
| !$omp do collapse(2) ordered |
| do i = 1, 10 |
| !BECAUSE: This code prevents perfect nesting |
| print *, i |
| do j = 1, 10 |
| print *, i, j |
| end do |
| end do |
| !$omp end do |
| end subroutine |
| |
| ! Bare ORDERED with COLLAPSE(2), perfectly nested: valid. |
| subroutine bare_ordered_collapse_perfect |
| integer i, j |
| |
| !$omp do collapse(2) ordered |
| do i = 1, 10 |
| do j = 1, 10 |
| print *, i, j |
| end do |
| end do |
| !$omp end do |
| end subroutine |
| |
| ! Bare ORDERED with no COLLAPSE: only one loop is associated (depth 1), so |
| ! perfect nesting is trivially satisfied and intervening code is allowed. |
| subroutine bare_ordered_no_collapse |
| integer i, j |
| |
| !$omp do ordered |
| do i = 1, 10 |
| print *, i |
| do j = 1, 10 |
| print *, i, j |
| end do |
| end do |
| !$omp end do |
| end subroutine |