summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/goacc/routine-5.f90
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gfortran.dg/goacc/routine-5.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/routine-5.f90109
1 files changed, 109 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-5.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-5.f90
new file mode 100644
index 00000000000..68c51496866
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/routine-5.f90
@@ -0,0 +1,109 @@
+! Test invalid intra-routine parallellism.
+
+module param
+ integer, parameter :: N = 32
+end module param
+
+subroutine gang (a)
+ !$acc routine gang
+ integer, intent (inout) :: a(N)
+ integer :: i
+
+ !$acc loop
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop gang
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop worker
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop vector
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+end subroutine gang
+
+subroutine worker (a)
+ !$acc routine worker
+ integer, intent (inout) :: a(N)
+ integer :: i
+
+ !$acc loop
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop gang ! { dg-error "disallowed by containing routine" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop worker
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop vector
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+end subroutine worker
+
+subroutine vector (a)
+ !$acc routine vector
+ integer, intent (inout) :: a(N)
+ integer :: i
+
+ !$acc loop
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop gang ! { dg-error "disallowed by containing routine" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop worker ! { dg-error "disallowed by containing routine" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop vector
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+end subroutine vector
+
+subroutine seq (a)
+ !$acc routine seq
+ integer, intent (inout) :: a(N)
+ integer :: i
+
+ !$acc loop ! { dg-warning "insufficient partitioning" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop gang ! { dg-error "disallowed by containing routine" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop worker ! { dg-error "disallowed by containing routine" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+
+ !$acc loop vector ! { dg-error "disallowed by containing routine" }
+ do i = 1, N
+ a(i) = a(i) - a(i)
+ end do
+end subroutine seq