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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
! See also loop-1.f95.
! { dg-additional-options "-std=legacy" }
program test
call test1
contains
subroutine test1
integer :: i, j, k, b(10)
integer, dimension (30) :: a
double precision :: d
real :: r
i = 0
!$acc loop
do 100 ! { dg-error "cannot be a DO WHILE or DO without loop control" }
if (i .gt. 0) exit ! { dg-error "EXIT statement" }
100 i = i + 1
i = 0
!$acc loop
do ! { dg-error "cannot be a DO WHILE or DO without loop control" }
if (i .gt. 0) exit ! { dg-error "EXIT statement" }
i = i + 1
end do
i = 0
!$acc loop
do 200 while (i .lt. 4) ! { dg-error "cannot be a DO WHILE or DO without loop control" }
200 i = i + 1
!$acc loop
do while (i .lt. 8) ! { dg-error "cannot be a DO WHILE or DO without loop control" }
i = i + 1
end do
!$acc loop
do 300 d = 1, 30, 6
i = d
300 a(i) = 1
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 33 }
!$acc loop
do d = 1, 30, 5
i = d
a(i) = 2
end do
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 }
!$acc loop
do i = 1, 30
if (i .eq. 16) exit ! { dg-error "EXIT statement" }
end do
!$acc loop
outer: do i = 1, 30
do j = 5, 10
if (i .eq. 6 .and. j .eq. 7) exit outer ! { dg-error "EXIT statement" }
end do
end do outer
last: do i = 1, 30
end do last
! different types of loop are allowed
!$acc loop
do i = 1,10
end do
!$acc loop
do 400, i = 1,10
400 a(i) = i
! after loop directive must be loop
!$acc loop
a(1) = 1 ! { dg-error "Expected DO loop" }
do i = 1,10
enddo
! combined directives may be used with/without end
!$acc parallel loop
do i = 1,10
enddo
!$acc parallel loop
do i = 1,10
enddo
!$acc end parallel loop
!$acc kernels loop
do i = 1,10
enddo
!$acc kernels loop
do i = 1,10
enddo
!$acc end kernels loop
!$acc kernels loop reduction(max:i)
do i = 1,10
enddo
!$acc kernels
!$acc loop reduction(max:i)
do i = 1,10
enddo
!$acc end kernels
!$acc parallel loop collapse(0) ! { dg-error "constant positive integer" }
do i = 1,10
enddo
!$acc parallel loop collapse(-1) ! { dg-error "constant positive integer" }
do i = 1,10
enddo
!$acc parallel loop collapse(i) ! { dg-error "Constant expression required" }
do i = 1,10
enddo
!$acc parallel loop collapse(4) ! { dg-error "not enough DO loops for collapsed" }
do i = 1, 3
do j = 4, 6
do k = 5, 7
a(i+j-k) = i + j + k
end do
end do
end do
!$acc parallel loop collapse(2)
do i = 1, 5, 2
do j = i + 1, 7, i ! { dg-error "collapsed loops don.t form rectangular iteration space" }
end do
end do
!$acc parallel loop collapse(2)
do i = 1, 3
do j = 4, 6
end do
end do
!$acc parallel loop collapse(2)
do i = 1, 3
do j = 4, 6
end do
k = 4
end do
!$acc parallel loop collapse(3-1)
do i = 1, 3
do j = 4, 6
end do
k = 4
end do
!$acc parallel loop collapse(1+1)
do i = 1, 3
do j = 4, 6
end do
k = 4
end do
!$acc parallel loop collapse(2)
do i = 1, 3
do ! { dg-error "cannot be a DO WHILE or DO without loop control" }
end do
end do
!$acc parallel loop collapse(2)
do i = 1, 3
do r = 4, 6
end do
! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 150 }
end do
!$acc loop independent seq
do i = 1,10
enddo
!$acc cache (a(1:10)) ! { dg-error "ACC CACHE directive must be inside of loop" }
do i = 1,10
!$acc cache(a(i:i+1))
enddo
do i = 1,10
!$acc cache(a(i:i+1))
a(i) = i
!$acc cache(a(i+2:i+2+1))
enddo
end subroutine test1
end program test
|