1! { dg-do run } 2! { dg-options "-O2" } 3! { dg-additional-sources taskloop-5-a.f90 } 4 5module m_taskloop5 6 implicit none (type, external) 7 integer :: u(0:63), v, w(0:63) 8 9contains 10integer function test (a, b, c, d, fn, num_tasks, min_iters, max_iters, sep) 11 integer, value :: a, b, c, d 12 interface 13 subroutine fn (n1, n2, n3, n4) 14 integer, value :: n1, n2, n3, n4 15 end 16 end interface 17 integer :: num_tasks, min_iters, max_iters, sep 18 integer :: i, j, t 19 20 t = 0 21 u = 0 22 v = 0 23 call fn (a, b, c, d) 24 min_iters = 0 25 max_iters = 0 26 num_tasks = v 27 sep = v 28 if (v /= 0) then 29 min_iters = u(0) 30 max_iters = u(0) 31 t = u(0) 32 do i = 1, v - 1 33 if (min_iters > u(i)) & 34 min_iters = u(i) 35 if (max_iters < u(i)) & 36 max_iters = u(i) 37 t = t + u(i) 38 end do 39 40 if (min_iters /= max_iters) then 41 do i = 0, v - 2 42 block 43 integer :: min_idx 44 min_idx = i 45 do j = i + 1, v - 1 46 if (w(min_idx) > w(j)) & 47 min_idx = j 48 end do 49 if (min_idx /= i) then 50 block 51 integer tem 52 tem = u(i) 53 u(i) = u(min_idx) 54 u(min_idx) = tem 55 tem = w(i) 56 w(i) = w(min_idx) 57 w(min_idx) = tem 58 end block 59 end if 60 end block 61 end do 62 if (u(0) /= max_iters) & 63 stop 1 64 do i = 1, v - 1 65 if (u(i) /= u(i - 1)) then 66 if (sep /= v .or. u(i) /= min_iters) & 67 stop 2 68 sep = i; 69 end if 70 end do 71 end if 72 end if 73 test = t 74end 75end module 76