1module m
2  implicit none (type, external)
3  integer, volatile :: v
4contains
5subroutine foo (p, i)
6  integer :: p(0:*)
7  integer :: i
8  !$omp task depend (out: p(0))
9    v = v + 1
10  !$omp end task
11  !$omp task depend (in: p(0))
12    v = v + 1
13  !$omp end task
14  !$omp task depend (inout: p(0))
15    v = v + 1
16  !$omp end task
17  !$omp task depend (mutexinoutset: p(0))
18    v = v + 1
19  !$omp end task
20  !$omp task depend (out: p(0)) depend (in: p(1))
21    v = v + 1
22  !$omp end task
23  !$omp task depend (in: p(0)) depend (inout: p(1))
24    v = v + 1
25  !$omp end task
26  !$omp task depend (inout: p(0)) depend (mutexinoutset: p(1))
27    v = v + 1
28  !$omp end task
29  !$omp task depend (mutexinoutset: p(0)) depend (out: p(1))
30    v = v + 1
31  !$omp end task
32  !$omp task depend (iterator (j=0:2) , out : p(j))
33    v = v + 1
34  !$omp end task
35  !$omp task depend (iterator (j=0:2) , in : p(j))
36    v = v + 1
37  !$omp end task
38  !$omp task depend (iterator (j=0:2) , inout : p(j))
39    v = v + 1
40  !$omp end task
41  !$omp task depend (iterator (j=0:2) , mutexinoutset : p(j))
42    v = v + 1
43  !$omp end task
44  !$omp task depend (iterator (j=0:2) , out : p(j)) depend (iterator (j=0:2) , in : p(j + 2))
45    v = v + 1
46  !$omp end task
47  !$omp task depend (iterator (j=0:2) , in : p(j)) depend (iterator (j=0:2) , inout : p(j + 2))
48    v = v + 1
49  !$omp end task
50  !$omp task depend (iterator (j=0:2) , inout : p(j)) depend (iterator (j=0:2) , mutexinoutset : p(j + 2))
51    v = v + 1
52  !$omp end task
53  !$omp task depend (iterator (j=0:2) , mutexinoutset : p(j)) depend (iterator (j=0:2) , out : p(j + 2))
54    v = v + 1
55  !$omp end task
56  !$omp task depend (iterator (j=0:i) , out : p(j))
57    v = v + 1
58  !$omp end task
59  !$omp task depend (iterator (j=0:i) , in : p(j))
60    v = v + 1
61  !$omp end task
62  !$omp task depend (iterator (j=0:i) , inout : p(j))
63    v = v + 1
64  !$omp end task
65  !$omp task depend (iterator (j=0:i) , mutexinoutset : p(j))
66    v = v + 1
67  !$omp end task
68  !$omp task depend (iterator (j=0:i) , out : p(j)) depend (iterator (j=0:i) , in : p(j + 2))
69    v = v + 1
70  !$omp end task
71  !$omp task depend (iterator (j=0:i) , in : p(j)) depend (iterator (j=0:i) , inout : p(j + 2))
72    v = v + 1
73  !$omp end task
74  !$omp task depend (iterator (j=0:i) , inout : p(j)) depend (iterator (j=0:i) , mutexinoutset : p(j + 2))
75    v = v + 1
76  !$omp end task
77  !$omp task depend (iterator (j=0:i) , mutexinoutset : p(j)) depend (iterator (j=0:i) , out : p(j + 2))
78    v = v + 1
79  !$omp end task
80end
81end module
82
83program main
84  use m
85  implicit none (external, type)
86  integer p(4)
87  call foo (p, 2)
88  call foo (p, -1)
89end
90