1! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp 2! OpenMP Version 4.5 3! Various checks with the nesting of BARRIER construct 4 5program omp_nest_barrier 6 integer i, k, j 7 k = 0; 8 9 !$omp do 10 do i = 1, 10 11 k = k + 1 12 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 13 !$omp barrier 14 j = j -1 15 end do 16 17 !$omp do simd 18 do i = 1, 10 19 k = k + 1 20 !ERROR: The only OpenMP constructs that can be encountered during execution of a 'SIMD' region are the `ATOMIC` construct, the `LOOP` construct, the `SIMD` construct and the `ORDERED` construct with the `SIMD` clause. 21 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 22 !$omp barrier 23 j = j -1 24 end do 25 26 !$omp parallel do 27 do i = 1, 10 28 k = k + 1 29 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 30 !$omp barrier 31 j = j -1 32 end do 33 34 !$omp parallel do simd 35 do i = 1, 10 36 k = k + 1 37 !ERROR: The only OpenMP constructs that can be encountered during execution of a 'SIMD' region are the `ATOMIC` construct, the `LOOP` construct, the `SIMD` construct and the `ORDERED` construct with the `SIMD` clause. 38 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 39 !$omp barrier 40 j = j -1 41 end do 42 43 !$omp parallel 44 do i = 1, 10 45 k = k + 1 46 !$omp barrier 47 j = j -1 48 end do 49 !$omp end parallel 50 51 !$omp task 52 do i = 1, 10 53 k = k + 1 54 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 55 !$omp barrier 56 j = j -1 57 end do 58 !$omp end task 59 60 !$omp taskloop 61 do i = 1, 10 62 k = k + 1 63 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 64 !$omp barrier 65 j = j -1 66 end do 67 !$omp end taskloop 68 69 !$omp critical 70 do i = 1, 10 71 k = k + 1 72 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 73 !$omp barrier 74 j = j -1 75 end do 76 !$omp end critical 77 78 !$omp master 79 do i = 1, 10 80 k = k + 1 81 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 82 !$omp barrier 83 j = j -1 84 end do 85 !$omp end master 86 87 !$omp ordered 88 do i = 1, 10 89 k = k + 1 90 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 91 !$omp barrier 92 j = j -1 93 end do 94 !$omp end ordered 95 96 !$omp ordered 97 do i = 1, 10 98 !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 99 !$omp distribute 100 do k =1, 10 101 print *, "hello" 102 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 103 !$omp barrier 104 j = j -1 105 end do 106 !$omp end distribute 107 end do 108 !$omp end ordered 109 110 !$omp master 111 do i = 1, 10 112 !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 113 !$omp distribute 114 do k =1, 10 115 print *, "hello" 116 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 117 !$omp barrier 118 j = j -1 119 end do 120 !$omp end distribute 121 end do 122 !$omp end master 123 124 !$omp critical 125 do i = 1, 10 126 !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 127 !$omp distribute 128 do k =1, 10 129 print *, "hello" 130 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 131 !$omp barrier 132 j = j -1 133 end do 134 !$omp end distribute 135 end do 136 !$omp end critical 137 138 !$omp taskloop 139 do i = 1, 10 140 !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 141 !$omp distribute 142 do k =1, 10 143 print *, "hello" 144 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 145 !$omp barrier 146 j = j -1 147 end do 148 !$omp end distribute 149 end do 150 !$omp end taskloop 151 152 !$omp task 153 do i = 1, 10 154 !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. 155 !$omp distribute 156 do k =1, 10 157 print *, "hello" 158 !ERROR: `BARRIER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`,`CRITICAL`, `ORDERED`, `ATOMIC` or `MASTER` region. 159 !$omp barrier 160 j = j -1 161 end do 162 !$omp end distribute 163 end do 164 !$omp end task 165 166end program omp_nest_barrier 167