1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
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
|