1! RUN: %S/test_errors.sh %s %t %flang_fc1 -fopenmp
2! REQUIRES: shell
3! OpenMP Version 4.5
4! Various checks with the nesting of MASTER construct
5
6program omp_nest_master
7  integer i, k, j
8  k = 0;
9
10  !$omp do
11  do i = 1, 10
12    k = k + 1
13    !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
14    !$omp master
15    j = j -1
16    !$omp end master
17  end do
18
19  !$omp sections
20  !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
21    !$omp master
22    do i = 1, 10
23      k = k + 1
24    end do
25    !$omp end master
26  !$omp end sections
27
28  !$omp single
29  !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
30    !$omp master
31    do i = 1, 10
32      k = k + 1
33    end do
34    !$omp end master
35  !$omp end single
36
37
38
39  !$omp task
40  do i = 1, 10
41    k = k + 1
42    !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
43    !$omp master
44    j = j -1
45    !$omp end master
46  end do
47  !$omp end task
48
49  !$omp taskloop
50  do i = 1, 10
51    k = k + 1
52    !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
53    !$omp master
54    j = j -1
55    !$omp end master
56  end do
57  !$omp end taskloop
58
59  !$omp target parallel do simd
60  do i = 1, 10
61    k = k + 1
62    !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.
63    !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
64    !$omp master
65    j = j -1
66    !$omp end master
67  end do
68  !$omp end target parallel do simd
69
70  !$omp critical
71  do i = 1, 10
72    k = k + 1
73    !$omp master
74    j = j -1
75    !$omp end master
76  end do
77  !$omp end critical
78
79  !$omp ordered
80  do i = 1, 10
81    k = k + 1
82    !$omp master
83    j = j -1
84    !$omp end master
85  end do
86  !$omp end ordered
87
88  !$omp ordered
89  do i = 1, 10
90    !$omp teams
91    !$omp distribute
92    do k =1, 10
93      print *, "hello"
94      !$omp master
95      j = j -1
96      !$omp end master
97    end do
98    !$omp end distribute
99    !$omp end teams
100  end do
101  !$omp end ordered
102
103  !$omp critical
104  do i = 1, 10
105    !$omp teams
106    !$omp distribute
107    do k =1, 10
108      print *, "hello"
109      !$omp master
110      j = j -1
111      !$omp end master
112    end do
113    !$omp end distribute
114    !$omp end teams
115  end do
116  !$omp end critical
117
118  !$omp taskloop
119  do i = 1, 10
120    !$omp teams
121    !$omp distribute
122    do k =1, 10
123      print *, "hello"
124      !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
125      !$omp master
126      j = j -1
127      !$omp end master
128    end do
129    !$omp end distribute
130    !$omp end teams
131  end do
132  !$omp end taskloop
133
134  !$omp task
135  do i = 1, 10
136    !$omp teams
137    !$omp distribute
138    do k =1, 10
139      print *, "hello"
140      !ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
141      !$omp master
142      j = j -1
143      !$omp end master
144    end do
145    !$omp end distribute
146    !$omp end teams
147  end do
148  !$omp end task
149
150end program omp_nest_master
151