Rebase.
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / alloc-comp-3.f90
blob20f13144a62e285f27f4091b81d3e2e574dc3e42
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" } }
6 module 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
20 contains
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))) call abort
26 if (c) then
27 if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
28 if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
29 end if
30 if (val /= 0) then
31 if (obj%a /= val .or. obj%b /= val) call abort
32 if (obj%d /= val .or. obj%e /= val) call abort
33 if (c) then
34 if (any (obj%c /= val)) call abort
35 end if
36 if (f) then
37 if (obj%f /= val) call abort
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))) call abort
47 if (h) then
48 if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
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) call abort
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
113 end module m
114 use m
115 type (dt), allocatable :: z(:,:)
116 type (dt) :: y(2:3)
117 call foo (y, z, 4)
118 contains
119 subroutine foo (y, z, n)
120 use m
121 integer :: n
122 type (dt) :: x(2:n), y(3:)
123 type (dt), allocatable :: z(:,:)
124 logical, parameter :: F = .false.
125 logical, parameter :: T = .true.
126 logical :: l
127 if (lbound (x, 1) /= 2 .or. ubound (x, 1) /= 4) call abort
128 if (lbound (y, 1) /= 3 .or. ubound (y, 1) /= 4) call abort
129 call ver_dt (x(2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
130 call ver_dt (x(n), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
131 call ver_dt (y(3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
132 call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
133 !$omp parallel private (z)
134 if (allocated (z)) call abort
135 !$omp end parallel
136 !$omp parallel firstprivate (z)
137 if (allocated (z)) call abort
138 !$omp end parallel
139 l = F
140 !$omp parallel sections lastprivate (z) firstprivate (l)
141 !$omp section
142 if (.not. l) then
143 if (allocated (z)) call abort
144 end if
145 !$omp section
146 if (.not. l) then
147 if (allocated (z)) call abort
148 end if
149 allocate (z(-3:-3,2:3))
150 call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
151 call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
152 call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
153 call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
154 !$omp section
155 !$omp end parallel sections
156 if (.not.allocated (z)) call abort
157 if (lbound (z, 1) /= -3 .or. ubound (z, 1) /= -3) call abort
158 if (lbound (z, 2) /= 2 .or. ubound (z, 2) /= 3) call abort
159 call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
160 call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
161 call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
162 call ver_dt (y(4), 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(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
169 call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
170 call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
171 call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
172 call alloc_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
173 call ver_dt (y(4), 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(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
182 call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
183 call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
184 call alloc_dt (y(4), 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(n - 1), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
191 call ver_dt (y(4), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
192 deallocate (x(n - 1)%h, x(n - 1)%k)
193 deallocate (y(4)%h)
194 allocate (y(4)%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(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
202 call alloc_dt (y(4), 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 if (lbound (x, 1) /= 2 .or. ubound (x, 1) /= 4) call abort
207 if (lbound (y, 1) /= 3 .or. ubound (y, 1) /= 4) call abort
208 call ver_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
209 call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
210 call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
211 call ver_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
212 call alloc_dt (y(4), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
213 call ver_dt (y(4), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
214 call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
215 call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
216 call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
217 call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
218 call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
219 call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
220 !$omp end parallel
221 call ver_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
222 call alloc_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
223 call ver_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
224 call alloc_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
225 call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
226 call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
227 call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
228 call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
229 !$omp parallel firstprivate (x, y, z)
230 call ver_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
231 call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
232 call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
233 call ver_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
234 call alloc_dt (y(4), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
235 call ver_dt (y(4), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
236 call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
237 call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
238 call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
239 call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
240 call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
241 call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
242 !$omp end parallel
243 call ver_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
244 call ver_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
245 call alloc_dt (y(4), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
246 call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
247 call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
248 call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
249 l = F
250 !$omp parallel sections lastprivate (x, y, z) firstprivate (l)
251 !$omp section
252 if (l) then
253 call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
254 call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
255 call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
256 call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
257 else
258 call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
259 call ver_dt (y(4), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
260 call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
261 call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
262 end if
263 l = T
264 call alloc_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
265 call ver_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
266 call alloc_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
267 call ver_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
268 call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
269 call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
270 call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
271 call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
272 !$omp section
273 if (l) then
274 call ver_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
275 call ver_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
276 call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
277 call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
278 else
279 call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
280 call ver_dt (y(4), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
281 call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
282 call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
283 end if
284 l = T
285 call alloc_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
286 call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
287 call alloc_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
288 call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
289 call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
290 call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
291 call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
292 call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
293 !$omp section
294 !$omp end parallel sections
295 call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
296 call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
297 call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
298 call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
299 !$omp parallel sections lastprivate (x, y, z) firstprivate (l)
300 !$omp section
301 if (l) then
302 call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
303 call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
304 call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
305 call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
306 else
307 call ver_dt (x(n - 1), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
308 call ver_dt (y(4), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
309 call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
310 call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
311 end if
312 l = T
313 call alloc_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
314 call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
315 call alloc_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
316 call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
317 call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
318 call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
319 call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
320 call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
321 !$omp section
322 if (l) then
323 call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
324 call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
325 call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
326 call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
327 else
328 call ver_dt (x(n - 1), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
329 call ver_dt (y(4), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
330 call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
331 call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
332 end if
333 l = T
334 call alloc_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
335 call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
336 call alloc_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
337 call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
338 call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
339 call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
340 call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
341 call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
342 !$omp section
343 !$omp end parallel sections
344 call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
345 call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
346 call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
347 call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
348 !$omp parallel private (x, y, z)
349 call ver_dt (x(n - 1), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
350 call ver_dt (y(4), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
351 call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
352 call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
353 !$omp single
354 call alloc_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
355 call alloc_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
356 call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
357 call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
358 !$omp end single copyprivate (x, y, z)
359 call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
360 call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
361 call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
362 call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
363 !$omp end parallel
364 call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
365 call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
366 call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
367 call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
368 call ver_dt (x(2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
369 call ver_dt (x(n), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
370 call ver_dt (y(3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
371 end subroutine foo