1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
  
     | 
    
      ! 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 ordered
  arrayA(i) = foo(i)
  !$omp end ordered
  !$omp ordered threads
  arrayA(i) = foo(i)
  !$omp end ordered
  !$omp ordered simd
  arrayA(i) = foo(i)
  !$omp end ordered
  !$omp sections
  do i = 1, N
    !$omp ordered
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end sections
  !$omp do ordered
  do i = 1, N
    arrayB(i) = bar(i)
    !$omp ordered
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end do
  !$omp sections
  do i = 1, N
    !ERROR: An ORDERED directive with SIMD clause must be closely nested in a SIMD or worksharing-loop SIMD region
    !$omp ordered simd
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end sections
  !$omp do ordered
  do i = 1, N
    !$omp parallel
    do j = 1, N
      !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a SIMD, worksharing-loop, or worksharing-loop SIMD region
      !$omp ordered
      arrayA(i) = foo(i)
      !$omp end ordered
    end do
    !$omp end parallel
  end do
  !$omp end do
  !$omp do ordered
  do i = 1, N
    !$omp target parallel
    do j = 1, N
      !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a SIMD, worksharing-loop, or worksharing-loop SIMD region
      !$omp ordered
      arrayA(i) = foo(i)
      !$omp end ordered
    end do
    !$omp end target parallel
  end do
  !$omp end do
  !$omp do
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end do
  !$omp do
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered threads
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end do
  !$omp do ordered(1)
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end do
  !$omp do ordered(1)
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered threads
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end do
  !$omp parallel do ordered(1)
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end parallel do
  !$omp parallel do ordered(1)
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered threads
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end parallel do
  !$omp target parallel do ordered(1)
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end target parallel do
  !$omp target parallel do ordered(1)
  do i = 1, N
    !ERROR: An ORDERED directive without the DEPEND clause must be closely nested in a worksharing-loop (or worksharing-loop SIMD) region with ORDERED clause without the parameter
    !$omp ordered threads
    arrayA(i) = foo(i)
    !$omp end ordered
  end do
  !$omp end target parallel do
end
 
     |