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" } }
9 integer, allocatable
:: c(:,:)
11 integer, allocatable
:: f
15 type (dl
), allocatable
:: h(:)
18 type (dl
), allocatable
:: k
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
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
31 if (obj
%a
/= val
.or
. obj
%b
/= val
) stop 4
32 if (obj
%d
/= val
.or
. obj
%e
/= val
) stop 5
34 if (any (obj
%c
/= val
)) stop 6
37 if (obj
%f
/= val
) stop 7
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
46 if ((h
.neqv
. allocated (obj
%h
)) .or
. (k
.neqv
. allocated (obj
%k
))) stop 8
48 if (lbound (obj
%h
, 1) /= hl
.or
. ubound (obj
%h
, 1) /= hu
) stop 9
50 call ver_dl (obj
%h(i
), val
, c
, cl1
, cu1
, cl2
, cu2
, f
)
55 call ver_dl (obj
%j(i
, j
), val
, c
, cl1
, cu1
, cl2
, cu2
, f
)
58 if (k
) call ver_dl (obj
%k
, val
, c
, cl1
, cu1
, cl2
, cu2
, f
)
60 if (obj
%g
/= val
.or
. obj
%i
/= val
) stop 10
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
73 if (allocated (obj
%c
)) deallocate (obj
%c
)
75 allocate (obj
%c(cl1
:cu1
, cl2
:cu2
))
76 if (val
/= 0) obj
%c
= val
79 if (.not
.allocated (obj
%f
)) allocate (obj
%f
)
80 if (val
/= 0) obj
%f
= val
82 if (allocated (obj
%f
)) deallocate (obj
%f
)
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
94 if (allocated (obj
%h
)) deallocate (obj
%h
)
96 allocate (obj
%h(hl
:hu
))
98 call alloc_dl (obj
%h(i
), val
, c
, cl1
, cu1
, cl2
, cu2
, f
)
103 call alloc_dl (obj
%j(i
, j
), val
, c
, cl1
, cu1
, cl2
, cu2
, f
)
107 if (.not
.allocated (obj
%k
)) allocate (obj
%k
)
108 call alloc_dl (obj
%k
, val
, c
, cl1
, cu1
, cl2
, cu2
, f
)
110 if (allocated (obj
%k
)) deallocate (obj
%k
)
112 end subroutine alloc_dt
120 type (dt
) :: x
, y
, z(-3:-3,2:3)
121 logical, parameter :: F
= .false
.
122 logical, parameter :: T
= .true
.
124 call ver_dt (x
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
125 call ver_dt (y
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
126 call ver_dt (z(-3,2), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
127 call ver_dt (z(-3,3), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
128 !$omp parallel private (x, y, z)
129 call ver_dt (x
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
130 call alloc_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
131 call ver_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
132 call ver_dt (y
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
133 call alloc_dt (y
, 14, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
134 call ver_dt (y
, 14, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
135 call ver_dt (z(-3,2), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
136 call alloc_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
137 call ver_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
138 call ver_dt (z(-3,3), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
139 call alloc_dt (z(-3,3), 14, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
140 call ver_dt (z(-3,3), 14, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
142 call ver_dt (x
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
143 call alloc_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
144 call ver_dt (y
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
145 call alloc_dt (y
, 14, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
146 call ver_dt (z(-3,2), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
147 call alloc_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
148 call ver_dt (z(-3,3), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
149 call alloc_dt (z(-3,3), 14, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
150 !$omp parallel private (x, y, z)
151 call ver_dt (x
, 0, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
152 call ver_dt (y
, 0, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
153 deallocate (x
%h
, x
%k
)
156 call ver_dt (z(-3,2), 0, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
157 call ver_dt (z(-3,3), 0, T
, 3, 4, F
, T
, 1, 1, 2, 4, T
)
158 deallocate (z(-3,2)%h
, z(-3,2)%k
)
159 deallocate (z(-3,3)%h
)
162 call alloc_dt (x
, 5, T
, 1, 2, F
, T
, 2, 3, -2, -2, F
)
163 call alloc_dt (y
, 15, F
, 0, 0, T
, T
, 2, 2, 2, 2, T
)
164 call alloc_dt (z(-3,2), 5, T
, 1, 2, F
, T
, 2, 3, -2, -2, F
)
165 call alloc_dt (z(-3,3), 15, F
, 0, 0, T
, T
, 2, 2, 2, 2, T
)
166 !$omp parallel firstprivate (x, y, z)
167 call ver_dt (x
, 5, T
, 1, 2, F
, T
, 2, 3, -2, -2, F
)
168 call alloc_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
169 call ver_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
170 call ver_dt (y
, 15, F
, 0, 0, T
, T
, 2, 2, 2, 2, T
)
171 call alloc_dt (y
, 4, T
, 3, 4, T
, T
, 1, 1, 2, 4, T
)
172 call ver_dt (y
, 4, T
, 3, 4, T
, T
, 1, 1, 2, 4, T
)
173 call ver_dt (z(-3,2), 5, T
, 1, 2, F
, T
, 2, 3, -2, -2, F
)
174 call alloc_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
175 call ver_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
176 call ver_dt (z(-3,3), 15, F
, 0, 0, T
, T
, 2, 2, 2, 2, T
)
177 call alloc_dt (z(-3,3), 4, T
, 3, 4, T
, T
, 1, 1, 2, 4, T
)
178 call ver_dt (z(-3,3), 4, T
, 3, 4, T
, T
, 1, 1, 2, 4, T
)
180 call ver_dt (x
, 5, T
, 1, 2, F
, T
, 2, 3, -2, -2, F
)
181 call alloc_dt (x
, 4, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
182 call ver_dt (y
, 15, F
, 0, 0, T
, T
, 2, 2, 2, 2, T
)
183 call alloc_dt (y
, 16, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
184 call ver_dt (z(-3,2), 5, T
, 1, 2, F
, T
, 2, 3, -2, -2, F
)
185 call alloc_dt (z(-3,2), 4, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
186 call ver_dt (z(-3,3), 15, F
, 0, 0, T
, T
, 2, 2, 2, 2, T
)
187 call alloc_dt (z(-3,3), 16, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
188 !$omp parallel firstprivate (x, y, z)
189 call ver_dt (x
, 4, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
190 call alloc_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
191 call ver_dt (x
, 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
192 call ver_dt (y
, 16, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
193 call alloc_dt (y
, 17, T
, 1, 2, F
, T
, 2, 2, 3, 3, F
)
194 call ver_dt (y
, 17, T
, 1, 2, F
, T
, 2, 2, 3, 3, F
)
195 call ver_dt (z(-3,2), 4, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
196 call alloc_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
197 call ver_dt (z(-3,2), 4, T
, -3, -1, T
, T
, -1, -1, 2, 3, T
)
198 call ver_dt (z(-3,3), 16, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
199 call alloc_dt (z(-3,3), 17, T
, 1, 2, F
, T
, 2, 2, 3, 3, F
)
200 call ver_dt (z(-3,3), 17, T
, 1, 2, F
, T
, 2, 2, 3, 3, F
)
202 call ver_dt (x
, 4, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
203 call ver_dt (y
, 16, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
204 call alloc_dt (y
, 18, T
, 0, 1, T
, T
, 0, 1, 0, 1, T
)
205 call ver_dt (z(-3,2), 4, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
206 call ver_dt (z(-3,3), 16, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
207 call alloc_dt (z(-3,3), 18, T
, 0, 1, T
, T
, 0, 1, 0, 1, T
)
209 !$omp parallel sections lastprivate (x, y, z) firstprivate (l)
212 call ver_dt (x
, 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
213 call ver_dt (y
, 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
214 call ver_dt (z(-3,2), 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
215 call ver_dt (z(-3,3), 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
217 call ver_dt (x
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
218 call ver_dt (y
, 0, T
, 0, 1, T
, T
, 0, 1, 0, 1, T
)
219 call ver_dt (z(-3,2), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
220 call ver_dt (z(-3,3), 0, T
, 0, 1, T
, T
, 0, 1, 0, 1, T
)
223 call alloc_dt (x
, 7, T
, 1, 1, T
, T
, 1, 2, 3, 3, T
)
224 call ver_dt (x
, 7, T
, 1, 1, T
, T
, 1, 2, 3, 3, T
)
225 call alloc_dt (y
, 20, T
, 0, 0, F
, T
, 2, 2, 3, 4, F
)
226 call ver_dt (y
, 20, T
, 0, 0, F
, T
, 2, 2, 3, 4, F
)
227 call alloc_dt (z(-3,2), 7, T
, 1, 1, T
, T
, 1, 2, 3, 3, T
)
228 call ver_dt (z(-3,2), 7, T
, 1, 1, T
, T
, 1, 2, 3, 3, T
)
229 call alloc_dt (z(-3,3), 20, T
, 0, 0, F
, T
, 2, 2, 3, 4, F
)
230 call ver_dt (z(-3,3), 20, T
, 0, 0, F
, T
, 2, 2, 3, 4, F
)
233 call ver_dt (x
, 7, T
, 1, 1, T
, T
, 1, 2, 3, 3, T
)
234 call ver_dt (y
, 20, T
, 0, 0, F
, T
, 2, 2, 3, 4, F
)
235 call ver_dt (z(-3,2), 7, T
, 1, 1, T
, T
, 1, 2, 3, 3, T
)
236 call ver_dt (z(-3,3), 20, T
, 0, 0, F
, T
, 2, 2, 3, 4, F
)
238 call ver_dt (x
, 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
239 call ver_dt (y
, 0, T
, 0, 1, T
, T
, 0, 1, 0, 1, T
)
240 call ver_dt (z(-3,2), 0, F
, 0, 0, F
, F
, 0, 0, 0, 0, F
)
241 call ver_dt (z(-3,3), 0, T
, 0, 1, T
, T
, 0, 1, 0, 1, T
)
244 call alloc_dt (x
, 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
245 call ver_dt (x
, 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
246 call alloc_dt (y
, 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
247 call ver_dt (y
, 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
248 call alloc_dt (z(-3,2), 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
249 call ver_dt (z(-3,2), 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
250 call alloc_dt (z(-3,3), 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
251 call ver_dt (z(-3,3), 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
253 !$omp end parallel sections
254 call ver_dt (x
, 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
255 call ver_dt (y
, 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
256 call ver_dt (z(-3,2), 9, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
257 call ver_dt (z(-3,3), 21, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
258 !$omp parallel sections lastprivate (x, y, z) firstprivate (l)
261 call ver_dt (x
, 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
262 call ver_dt (y
, 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
263 call ver_dt (z(-3,2), 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
264 call ver_dt (z(-3,3), 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
266 call ver_dt (x
, 0, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
267 call ver_dt (y
, 0, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
268 call ver_dt (z(-3,2), 0, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
269 call ver_dt (z(-3,3), 0, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
272 call alloc_dt (x
, 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
273 call ver_dt (x
, 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
274 call alloc_dt (y
, 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
275 call ver_dt (y
, 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
276 call alloc_dt (z(-3,2), 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
277 call ver_dt (z(-3,2), 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
278 call alloc_dt (z(-3,3), 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
279 call ver_dt (z(-3,3), 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
282 call ver_dt (x
, 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
283 call ver_dt (y
, 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
284 call ver_dt (z(-3,2), 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
285 call ver_dt (z(-3,3), 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
287 call ver_dt (x
, 0, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
288 call ver_dt (y
, 0, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
289 call ver_dt (z(-3,2), 0, T
, 1, 1, F
, F
, 0, 0, 0, 0, T
)
290 call ver_dt (z(-3,3), 0, F
, 0, 0, T
, T
, 1, 2, 3, 4, T
)
293 call alloc_dt (x
, 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
294 call ver_dt (x
, 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
295 call alloc_dt (y
, 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
296 call ver_dt (y
, 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
297 call alloc_dt (z(-3,2), 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
298 call ver_dt (z(-3,2), 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
299 call alloc_dt (z(-3,3), 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
300 call ver_dt (z(-3,3), 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
302 !$omp end parallel sections
303 call ver_dt (x
, 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
304 call ver_dt (y
, 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
305 call ver_dt (z(-3,2), 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
306 call ver_dt (z(-3,3), 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
307 !$omp parallel private (x, y, z)
308 call ver_dt (x
, 0, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
309 call ver_dt (y
, 0, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
310 call ver_dt (z(-3,2), 0, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
311 call ver_dt (z(-3,3), 0, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
313 call alloc_dt (x
, 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
314 call alloc_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 alloc_dt (z(-3,3), 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
317 !$omp end single copyprivate (x, y, z)
318 call ver_dt (x
, 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
319 call ver_dt (y
, 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
320 call ver_dt (z(-3,2), 3, F
, 0, 0, T
, T
, 0, 1, 0, 1, F
)
321 call ver_dt (z(-3,3), 22, T
, 5, 5, F
, T
, 2, 3, 2, 2, T
)
323 call ver_dt (x
, 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
324 call ver_dt (y
, 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)
325 call ver_dt (z(-3,2), 5, F
, 0, 0, T
, T
, -1, -1, -1, -1, T
)
326 call ver_dt (z(-3,3), 23, T
, 0, 1, T
, T
, 2, 2, 2, 2, F
)