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