blob: f91c7fae09d3db126779ea07486d32d66e577735 [file] [log] [blame]
module m
integer a, b
end module m
subroutine f1
use m
!$omp scan inclusive (a) ! { dg-error "Unexpected ..OMP SCAN at .1. outside loop construct with 'inscan' REDUCTION clause" }
!$omp scan exclusive (b) ! { dg-error "Unexpected ..OMP SCAN at .1. outside loop construct with 'inscan' REDUCTION clause" }
end
subroutine f2 (c, d, e, f)
use m
implicit none
integer i, l, c(*), d(*), e(64), f(64)
l = 1
!$omp do reduction (inscan, +: a) reduction (+: b) ! { dg-error "'inscan' and non-'inscan' 'reduction' clauses on the same construct" }
do i = 1, 64
block
b = b + 1
a = a + c(i)
end block
!$omp scan inclusive (a)
d(i) = a
end do
!$omp do reduction (+: a) reduction (inscan, +: b) ! { dg-error "'inscan' and non-'inscan' 'reduction' clauses on the same construct" }
do i = 1, 64
block
a = a + 1
b = b + c(i)
end block
!$omp scan inclusive (b)
d(i) = b
end do
!$omp do reduction (inscan, +: e)
do i = 1, 64
block
e(1) = e(1) + c(i)
e(2) = e(2) + c(i)
end block
!$omp scan inclusive (a, e)
block
d(1) = e(1)
f(2) = e(2)
end block
end do
!$omp do reduction (inscan, +: e(:2)) ! { dg-error "Syntax error in OpenMP variable list" }
do i = 1, 64
block
e(1) = e(1) + c(i)
e(2) = e(2) + c(i)
end block
!$omp scan inclusive (a, e) ! { dg-error "outside loop construct with 'inscan' REDUCTION clause" }
block
d(1) = e(1)
f(2) = e(2)
end block
end do
!$omp do reduction (inscan, +: a) ordered ! { dg-error "ORDERED clause specified together with 'inscan' REDUCTION clause" }
do i = 1, 64
a = a + c(i)
!$omp scan inclusive (a)
d(i) = a
end do
!$omp do reduction (inscan, +: a) ordered(1) ! { dg-error "ORDERED clause specified together with 'inscan' REDUCTION clause" }
do i = 1, 64
a = a + c(i)
!$omp scan inclusive (a)
d(i) = a
end do
!$omp do reduction (inscan, +: a) schedule(static) ! { dg-error "SCHEDULE clause specified together with 'inscan' REDUCTION clause" }
do i = 1, 64
a = a + c(i)
!$omp scan inclusive (a)
d(i) = a
end do
!$omp do reduction (inscan, +: a) schedule(static, 2) ! { dg-error "SCHEDULE clause specified together with 'inscan' REDUCTION clause" }
do i = 1, 64
a = a + c(i)
!$omp scan inclusive (a)
d(i) = a
end do
!$omp do reduction (inscan, +: a) schedule(nonmonotonic: dynamic, 2) ! { dg-error "SCHEDULE clause specified together with 'inscan' REDUCTION clause" }
do i = 1, 64
a = a + c(i)
!$omp scan inclusive (a)
d(i) = a
end do
end
subroutine f3 (c, d)
use m
implicit none
integer i, c(64), d(64)
!$omp teams reduction (inscan, +: a)
! { dg-error "'inscan' REDUCTION clause on construct other than DO, SIMD, DO SIMD, PARALLEL DO, PARALLEL DO SIMD" "" { target *-*-* } .-1 }
! ...
!$omp end teams
!$omp scope reduction (inscan, +: a)
! { dg-error "'inscan' REDUCTION clause on construct other than DO, SIMD, DO SIMD, PARALLEL DO, PARALLEL DO SIMD" "" { target *-*-* } .-1 }
! ...
!$omp end scope
!$omp target parallel do reduction (inscan, +: a) map (c, d)
! { dg-error "'inscan' REDUCTION clause on construct other than DO, SIMD, DO SIMD, PARALLEL DO, PARALLEL DO SIMD" "" { target *-*-* } .-1 }
do i = 1, 64
d(i) = a
!$omp scan exclusive (a)
a = a + c(i)
end do
!$omp teams
!$omp distribute parallel do reduction (inscan, +: a)
! { dg-error "'inscan' REDUCTION clause on construct other than DO, SIMD, DO SIMD, PARALLEL DO, PARALLEL DO SIMD" "" { target *-*-* } .-1 }
do i = 1, 64
d(i) = a
!$omp scan exclusive (a)
a = a + c(i)
end do
!$omp end teams
!$omp distribute parallel do simd reduction (inscan, +: a)
! { dg-error "'inscan' REDUCTION clause on construct other than DO, SIMD, DO SIMD, PARALLEL DO, PARALLEL DO SIMD" "" { target *-*-* } .-1 }
do i = 1, 64
d(i) = a
!$omp scan exclusive (a)
a = a + c(i)
end do
end
subroutine f4 (c, d)
use m
implicit none
integer i, c(64), d(64)
!$omp taskloop reduction (inscan, +: a)
! { dg-error "'inscan' REDUCTION clause on construct other than DO, SIMD, DO SIMD, PARALLEL DO, PARALLEL DO SIMD" "" { target *-*-* } .-1 }
do i = 1, 64
d(i) = a
!$omp scan exclusive (a)
a = a + c(i)
end do
end
subroutine f7
use m
implicit none
integer i
!$omp simd reduction (inscan, +: a)
do i = 1, 64
if (i == 23) then ! { dg-error "invalid exit from OpenMP structured block" "" { target c++ } .+1 }
cycle ! { dg-error "invalid branch to/from OpenMP structured block" "" { target c } }
elseif (i == 27) then
goto 123 ! Diagnostic by ME, see scan-7.f90
! { dg-warning "is not in the same block as the GOTO statement" "" { target *-*-* } .-1 }
endif
!$omp scan exclusive (a)
block
123 a = 0 ! { dg-error "jump to label 'l1'" "" { target c++ } }
! { dg-warning "is not in the same block as the GOTO statement" "" { target *-*-* } .-1 }
if (i == 33) then ! { dg-error "invalid exit from OpenMP structured block" "" { target c++ } .+1 }
cycle ! { dg-error "invalid branch to/from OpenMP structured block" "" { target c } }
end if
end block
end do
end
subroutine f8 (c, d, e, f)
use m
implicit none
integer i, c(64), d(64), e(64), f(64)
!$omp do reduction (inscan, +: a, b) ! { dg-error "With INSCAN at .1., expected loop body with ..OMP SCAN between two structured-block-sequences" }
do i = 1, 64
block
a = a + c(i)
b = b + d(i)
end block
!$omp scan inclusive (a) inclusive (b) ! { dg-error "Unexpected junk after ..OMP SCAN" }
block
e(i) = a
f(i) = b
end block
end do
!$omp do reduction (inscan, +: a, b) ! { dg-error "With INSCAN at .1., expected loop body with ..OMP SCAN between two structured-block-sequences" }
do i = 1, 64
block
a = a + c(i)
b = b + d(i)
end block
!$omp scan ! { dg-error "Expected INCLUSIVE or EXCLUSIVE clause" }
block
e(i) = a
f(i) = b
end block
end do
end
subroutine f9
use m
implicit none
integer i
! The first error (exit) causes two follow-up errors:
!$omp simd reduction (inscan, +: a) ! { dg-error "With INSCAN at .1., expected loop body with ..OMP SCAN between two structured-block-sequences" }
do i = 1, 64
if (i == 23) &
exit ! { dg-error "EXIT statement at .1. terminating ..OMP DO loop" } */
!$omp scan exclusive (a) ! { dg-error "Unexpected ..OMP SCAN at .1. outside loop construct with 'inscan' REDUCTION clause" }
a = a + 1
end do
end