integer function s1 (a1, a2, a3) result(r) implicit none integer :: a1, a2, a3 integer :: i, j, k procedure(integer) :: iii r = 0 !$omp simd collapse(3) reduction (inscan, +:r) do i = 1, a1 do j = 1, a2 do k = 1, a3 !$omp scan exclusive (r) ! { dg-warning "!.OMP SCAN at .1. with zero executable statements in preceding structured block sequence" } call f1 (2, k, r) end do end do end do !$omp simd collapse(3) reduction (inscan, +:r) do i = 1, a1 do j = 1, a2 do k = 1, a3 r = r + iii (i, j, k) !$omp scan exclusive (r) ! { dg-warning "!.OMP SCAN at .1. with zero executable statements in succeeding structured block sequence" } end do end do end do !$omp simd collapse(3) reduction (inscan, +:r) do i = 1, a1 do j = 1, a2 do k = 1, a3 !$omp scan inclusive (r) ! { dg-warning "!.OMP SCAN at .1. with zero executable statements in preceding structured block sequence" "" { target *-*-* } .-1 } ! { dg-warning "!.OMP SCAN at .1. with zero executable statements in succeeding structured block sequence" "" { target *-*-* } .-2 } end do end do end do end function integer function s2 (a1, a2, a3) result(r) implicit none integer :: a1, a2, a3 integer :: i, j, k procedure(integer) :: iii r = 0 !$omp simd collapse(3) reduction (inscan, +:r) ! { dg-error "With INSCAN at .1., expected loop body with !.OMP SCAN between two structured block sequences" } do i = 1, a1 do j = 1, a2 do k = 1, a3 call f1 (2, k, r) r = r + iii (i, j, k) end do end do end do r = 0 !$omp simd collapse(3) reduction (inscan, +:r) ! { dg-error "With INSCAN at .1., expected loop body with !.OMP SCAN between two structured block sequences" } do i = 1, a1 do j = 1, a2 do k = 1, a3 end do end do end do r = 0 !$omp simd collapse(3) reduction (inscan, +:r) do i = 1, a1 do j = 1, a2 do k = 1, a3 call f1 (2, k, r) !$omp scan inclusive (r) !$omp scan inclusive (r) ! { dg-error "Unexpected !.OMP SCAN at .1. outside loop construct with 'inscan' REDUCTION clause" } r = r + iii (i, j, k) end do end do end do !$omp scan inclusive (r) ! { dg-error "Unexpected !.OMP SCAN at .1. outside loop construct with 'inscan' REDUCTION clause" } r = 0 !$omp simd collapse(3) reduction (inscan, +:r) ! { dg-error "With INSCAN at .1., expected loop body with !.OMP SCAN between two structured block sequences" } do i = 1, a1 do j = 1, a2 do k = 1, a3 call f1 (2, k, r) block !$omp scan inclusive (r) ! { dg-error "Unexpected !.OMP SCAN at .1. outside loop construct with 'inscan' REDUCTION clause" } end block r = r + iii (i, j, k) end do end do end do end function