1! RUN: %S/test_errors.sh %s %t %flang -fopenmp
2! REQUIRES: shell
3! Check OpenMP clause validity for the following directives:
4!     2.10 Device constructs
5program main
6
7  real(8) :: arrayA(256), arrayB(256)
8  integer :: N
9
10  arrayA = 1.414
11  arrayB = 3.14
12  N = 256
13
14  !$omp task
15  !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
16  !$omp distribute
17  do i = 1, N
18     a = 3.14
19  enddo
20  !$omp end distribute
21  !$omp end task
22
23  !$omp teams
24   do i = 1, N
25      !ERROR: Only `DISTRIBUTE` or `PARALLEL` regions are allowed to be strictly nested inside `TEAMS` region.
26      !$omp task
27      do k = 1, N
28         a = 3.14
29      enddo
30      !$omp end task
31   enddo
32   !$omp end teams
33
34   !$omp teams
35   do i = 1, N
36      !$omp parallel
37      do k = 1, N
38         a = 3.14
39      enddo
40      !$omp end parallel
41   enddo
42   !$omp end teams
43
44  !$omp parallel
45  !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
46  !$omp distribute
47  do i = 1, N
48     a = 3.14
49  enddo
50  !$omp end distribute
51  !$omp end parallel
52
53  !$omp teams
54   !ERROR: Only `DISTRIBUTE` or `PARALLEL` regions are allowed to be strictly nested inside `TEAMS` region.
55   !$omp target
56      !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
57      !$omp distribute
58      do i = 1, 10
59         j = j + 1
60      end do
61      !$omp end distribute
62   !$omp end target
63  !$omp end teams
64
65  !$omp teams
66   !$omp parallel
67   do k = 1,10
68      print *, "hello"
69   end do
70   !$omp end parallel
71   !$omp distribute firstprivate(a)
72   do i = 1, 10
73      j = j + 1
74   end do
75   !$omp end distribute
76  !$omp end teams
77
78  !$omp teams
79      !ERROR: Only `DISTRIBUTE` or `PARALLEL` regions are allowed to be strictly nested inside `TEAMS` region.
80      !$omp task
81      do k = 1,10
82         print *, "hello"
83      end do
84      !$omp end task
85      !$omp distribute firstprivate(a)
86      do i = 1, 10
87         j = j + 1
88      end do
89      !$omp end distribute
90  !$omp end teams
91
92  !$omp task
93      !$omp parallel
94      do k = 1,10
95         print *, "hello"
96      end do
97      !$omp end parallel
98      !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region.
99      !$omp distribute firstprivate(a)
100      do i = 1, 10
101         j = j + 1
102      end do
103      !$omp end distribute
104  !$omp end task
105end program main
106