1! { dg-do compile }
2
3subroutine foo (a, b, p, q)
4  logical, value :: a
5  logical :: b
6  integer :: p(:)
7  integer, pointer :: q(:)
8  integer :: i
9  !$omp parallel if (a)
10  !$omp end parallel
11  !$omp parallel if (parallel:a)
12  !$omp end parallel
13  !$omp parallel do simd if (a)
14  do i = 1, 16
15  end do
16  !$omp end parallel do simd
17  !$omp parallel do simd if (parallel : a)
18  do i = 1, 16
19  end do
20  !$omp end parallel do simd
21  !$omp parallel do simd if (simd : a)
22  do i = 1, 16
23  end do
24  !$omp end parallel do simd
25  !$omp parallel do simd if (simd : a) if (parallel:b)
26  do i = 1, 16
27  end do
28  !$omp end parallel do simd
29  !$omp task if (a)
30  !$omp end task
31  !$omp task if (task: a)
32  !$omp end task
33  !$omp taskloop if (a)
34  do i = 1, 16
35  end do
36  !$omp end taskloop
37  !$omp taskloop if (taskloop : a)
38  do i = 1, 16
39  end do
40  !$omp end taskloop
41  !$omp taskloop simd if (a)
42  do i = 1, 16
43  end do
44  !$omp end taskloop simd
45  !$omp taskloop simd if (taskloop : a)
46  do i = 1, 16
47  end do
48  !$omp end taskloop simd
49  !$omp taskloop simd if (simd : a)
50  do i = 1, 16
51  end do
52  !$omp end taskloop simd
53  !$omp taskloop simd if (taskloop:b) if (simd : a)
54  do i = 1, 16
55  end do
56  !$omp end taskloop simd
57  !$omp target if (a)
58  !$omp end target
59  !$omp target if (target: a)
60  !$omp end target
61  !$omp target simd if (a)
62  do i = 1, 16
63  end do
64  !$omp end target simd
65  !$omp target simd if (simd : a) if (target: b)
66  do i = 1, 16
67  end do
68  !$omp end target simd
69  !$omp target teams distribute parallel do simd if (a)
70  do i = 1, 16
71  end do
72  !$omp end target teams distribute parallel do simd
73  !$omp target teams distribute parallel do simd if (parallel : a) if (target: b)
74  do i = 1, 16
75  end do
76  !$omp end target teams distribute parallel do simd
77  !$omp target teams distribute parallel do simd if (simd : a) if (target: b)
78  do i = 1, 16
79  end do
80  !$omp end target teams distribute parallel do simd
81
82  !$omp target data if (a) map (p(1:2))
83  !$omp end target data
84  !$omp target data if (target data: a) map (p(1:2))
85  !$omp end target data
86  !$omp target enter data if (a) map (to: p(1:2))
87  !$omp target enter data if (target enter data: a) map (to: p(1:2))
88  !$omp target exit data if (a) map (from: p(1:2))
89  !$omp target exit data if (target exit data: a) map (from: p(1:2))
90  !$omp target update if (a) to (q(1:3))
91  !$omp target update if (target update:a) to (q(1:3))
92  !$omp parallel
93    !$omp cancel parallel if (a)
94  !$omp end parallel
95  !$omp parallel
96    !$omp cancel parallel if (cancel:a)
97  !$omp end parallel
98  !$omp do
99  do i = 1, 16
100      !$omp cancel do if (a)
101  end do
102  !$omp do
103  do i = 1, 16
104      !$omp cancel do if (cancel: a)
105  end do
106  !$omp sections
107    !$omp section
108	!$omp cancel sections if (a)
109  !$omp end sections
110  !$omp sections
111    !$omp section
112	!$omp cancel sections if (cancel: a)
113  !$omp end sections
114  !$omp taskgroup
115    !$omp task
116      !$omp cancel taskgroup if (a)
117    !$omp end task
118    !$omp task
119      !$omp cancel taskgroup if (cancel: a)
120    !$omp end task
121  !$omp end taskgroup
122end
123