1! { dg-do run }
2! Don't cycle by default through all options, just test -O0 and -O2,
3! as this is quite large test.
4! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
5
6module m
7  type dl
8    integer :: a, b
9    integer, allocatable :: c(:,:)
10    integer :: d, e
11    integer, allocatable :: f
12  end type
13  type dt
14    integer :: g
15    type (dl), allocatable :: h(:)
16    integer :: i
17    type (dl) :: j(2, 2)
18    type (dl), allocatable :: k
19  end type
20contains
21  subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
22    type (dl), intent (in) :: obj
23    integer, intent (in) :: val, cl1, cu1, cl2, cu2
24    logical, intent (in) :: c, f
25    if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) stop 1
26    if (c) then
27      if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) stop 2
28      if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) stop 3
29    end if
30    if (val /= 0) then
31      if (obj%a /= val .or. obj%b /= val) stop 4
32      if (obj%d /= val .or. obj%e /= val) stop 5
33      if (c) then
34        if (any (obj%c /= val)) stop 6
35      end if
36      if (f) then
37        if (obj%f /= val) stop 7
38      end if
39    end if
40  end subroutine ver_dl
41  subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
42    type (dt), intent (in) :: obj
43    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
44    logical, intent (in) :: h, k, c, f
45    integer :: i, j
46    if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) stop 8
47    if (h) then
48      if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) stop 9
49      do i = hl, hu
50        call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
51      end do
52    end if
53    do i = 1, 2
54      do j = 1, 2
55        call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
56      end do
57    end do
58    if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
59    if (val /= 0) then
60      if (obj%g /= val .or. obj%i /= val) stop 10
61    end if
62  end subroutine ver_dt
63  subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
64    type (dl), intent (inout) :: obj
65    integer, intent (in) :: val, cl1, cu1, cl2, cu2
66    logical, intent (in) :: c, f
67    if (val /= 0) then
68      obj%a = val
69      obj%b = val
70      obj%d = val
71      obj%e = val
72    end if
73    if (allocated (obj%c)) deallocate (obj%c)
74    if (c) then
75      allocate (obj%c(cl1:cu1, cl2:cu2))
76      if (val /= 0) obj%c = val
77    end if
78    if (f) then
79      if (.not.allocated (obj%f)) allocate (obj%f)
80      if (val /= 0) obj%f = val
81    else
82      if (allocated (obj%f)) deallocate (obj%f)
83    end if
84  end subroutine alloc_dl
85  subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
86    type (dt), intent (inout) :: obj
87    integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
88    logical, intent (in) :: h, k, c, f
89    integer :: i, j
90    if (val /= 0) then
91      obj%g = val
92      obj%i = val
93    end if
94    if (allocated (obj%h)) deallocate (obj%h)
95    if (h) then
96      allocate (obj%h(hl:hu))
97      do i = hl, hu
98        call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
99      end do
100    end if
101    do i = 1, 2
102      do j = 1, 2
103        call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
104      end do
105    end do
106    if (k) then
107      if (.not.allocated (obj%k)) allocate (obj%k)
108      call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
109    else
110      if (allocated (obj%k)) deallocate (obj%k)
111    end if
112  end subroutine alloc_dt
113end module m
114  use m
115  type (dt), allocatable :: y
116  call foo (y)
117contains
118  subroutine foo (y)
119    use m
120    type (dt), allocatable :: x, y, z(:,:)
121    logical, parameter :: F = .false.
122    logical, parameter :: T = .true.
123    logical :: l
124!$omp parallel private (x, y, z)
125    if (allocated (x) .or. allocated (y) .or. allocated (z)) stop 11
126!$omp end parallel
127!$omp parallel firstprivate (x, y, z)
128    if (allocated (x) .or. allocated (y) .or. allocated (z)) stop 12
129!$omp end parallel
130    l = F
131!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
132!$omp section
133    if (.not. l) then
134      if (allocated (x) .or. allocated (y) .or. allocated (z)) stop 13
135    end if
136!$omp section
137    if (.not. l) then
138      if (allocated (x) .or. allocated (y) .or. allocated (z)) stop 14
139    end if
140    allocate (x, y, z(-3:-3,2:3))
141    call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
142    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
143    call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
144    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
145    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
146    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
147    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
148    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
149!$omp section
150!$omp end parallel sections
151    if (.not.allocated (x) .or. .not.allocated (y)) stop 15
152    if (.not.allocated (z)) stop 16
153    if (lbound (z, 1) /= -3 .or. ubound (z, 1) /= -3) stop 17
154    if (lbound (z, 2) /= 2 .or. ubound (z, 2) /= 3) stop 18
155    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
156    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
157    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
158    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
159    call alloc_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
160    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
161    call alloc_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
162    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
163    call alloc_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
164    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
165    call alloc_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
166    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
167!$omp parallel private (x, y, z)
168    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
169    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
170    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
171    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
172    call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
173    call ver_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
174    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
175    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
176    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
177    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
178    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
179    call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
180!$omp end parallel
181    call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
182    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
183    call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
184    call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
185    call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
186    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
187    call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
188    call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
189!$omp parallel private (x, y, z)
190    call ver_dt (x, 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
191    call ver_dt (y, 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
192    deallocate (x%h, x%k)
193    deallocate (y%h)
194    allocate (y%k)
195    call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
196    call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
197    deallocate (z(-3,2)%h, z(-3,2)%k)
198    deallocate (z(-3,3)%h)
199    allocate (z(-3,3)%k)
200!$omp end parallel
201    call alloc_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
202    call alloc_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
203    call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
204    call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
205!$omp parallel firstprivate (x, y, z)
206    call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
207    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
208    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
209    call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
210    call alloc_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
211    call ver_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
212    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
213    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
214    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
215    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
216    call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
217    call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
218!$omp end parallel
219    call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
220    call alloc_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
221    call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
222    call alloc_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
223    call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
224    call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
225    call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
226    call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
227!$omp parallel firstprivate (x, y, z)
228    call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
229    call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
230    call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
231    call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
232    call alloc_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
233    call ver_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
234    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
235    call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
236    call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
237    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
238    call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
239    call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
240!$omp end parallel
241    call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
242    call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
243    call alloc_dt (y, 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
244    call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
245    call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
246    call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
247    l = F
248!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
249!$omp section
250    if (l) then
251      call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
252      call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
253      call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
254      call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
255    else
256      call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
257      call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
258      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
259      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
260    end if
261    l = T
262    call alloc_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
263    call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
264    call alloc_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
265    call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
266    call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
267    call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
268    call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
269    call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
270!$omp section
271    if (l) then
272      call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
273      call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
274      call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
275      call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
276    else
277      call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
278      call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
279      call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
280      call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
281    end if
282    l = T
283    call alloc_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
284    call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
285    call alloc_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
286    call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
287    call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
288    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
289    call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
290    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
291!$omp section
292!$omp end parallel sections
293    call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
294    call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
295    call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
296    call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
297!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
298!$omp section
299    if (l) then
300      call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
301      call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
302      call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
303      call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
304    else
305      call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
306      call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
307      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
308      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
309    end if
310    l = T
311    call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
312    call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
313    call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
314    call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
315    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
316    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
317    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
318    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
319!$omp section
320    if (l) then
321      call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
322      call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
323      call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
324      call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
325    else
326      call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
327      call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
328      call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
329      call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
330    end if
331    l = T
332    call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
333    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
334    call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
335    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
336    call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
337    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
338    call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
339    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
340!$omp section
341!$omp end parallel sections
342    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
343    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
344    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
345    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
346!$omp parallel private (x, y, z)
347    call ver_dt (x, 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
348    call ver_dt (y, 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
349    call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
350    call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
351!$omp single
352    call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
353    call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
354    call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
355    call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
356!$omp end single copyprivate (x, y, z)
357    call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
358    call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
359    call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
360    call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
361!$omp end parallel
362    call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
363    call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
364    call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
365    call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
366  end subroutine foo
367end
368