! { dg-do run } ! { dg-options "-O2" } ! { dg-additional-sources taskloop-5-a.f90 } module m_taskloop5 implicit none (type, external) integer :: u(0:63), v, w(0:63) contains integer function test (a, b, c, d, fn, num_tasks, min_iters, max_iters, sep) integer, value :: a, b, c, d interface subroutine fn (n1, n2, n3, n4) integer, value :: n1, n2, n3, n4 end end interface integer :: num_tasks, min_iters, max_iters, sep integer :: i, j, t t = 0 u = 0 v = 0 call fn (a, b, c, d) min_iters = 0 max_iters = 0 num_tasks = v sep = v if (v /= 0) then min_iters = u(0) max_iters = u(0) t = u(0) do i = 1, v - 1 if (min_iters > u(i)) & min_iters = u(i) if (max_iters < u(i)) & max_iters = u(i) t = t + u(i) end do if (min_iters /= max_iters) then do i = 0, v - 2 block integer :: min_idx min_idx = i do j = i + 1, v - 1 if (w(min_idx) > w(j)) & min_idx = j end do if (min_idx /= i) then block integer tem tem = u(i) u(i) = u(min_idx) u(min_idx) = tem tem = w(i) w(i) = w(min_idx) w(min_idx) = tem end block end if end block end do if (u(0) /= max_iters) & stop 1 do i = 1, v - 1 if (u(i) /= u(i - 1)) then if (sep /= v .or. u(i) /= min_iters) & stop 2 sep = i; end if end do end if end if test = t end end module