1! See also loop-1-2.f95. 2! { dg-additional-options "-std=legacy" } 3 4module test 5 implicit none 6contains 7 8subroutine test1 9 integer :: i, j, k, b(10) 10 integer, dimension (30) :: a 11 double precision :: d 12 real :: r 13 i = 0 14 !$acc loop 15 do 100 ! { dg-error "cannot be a DO WHILE or DO without loop control" } 16 if (i .gt. 0) exit ! { dg-error "EXIT statement" } 17 100 i = i + 1 18 i = 0 19 !$acc loop 20 do ! { dg-error "cannot be a DO WHILE or DO without loop control" } 21 if (i .gt. 0) exit ! { dg-error "EXIT statement" } 22 i = i + 1 23 end do 24 i = 0 25 !$acc loop 26 do 200 while (i .lt. 4) ! { dg-error "cannot be a DO WHILE or DO without loop control" } 27 200 i = i + 1 28 !$acc loop 29 do while (i .lt. 8) ! { dg-error "cannot be a DO WHILE or DO without loop control" } 30 i = i + 1 31 end do 32 !$acc loop 33 do 300 d = 1, 30, 6 34 i = d 35 300 a(i) = 1 36 ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 33 } 37 !$acc loop 38 do d = 1, 30, 5 39 i = d 40 a(i) = 2 41 end do 42 ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 38 } 43 !$acc loop 44 do i = 1, 30 45 if (i .eq. 16) exit ! { dg-error "EXIT statement" } 46 end do 47 !$acc loop 48 outer: do i = 1, 30 49 do j = 5, 10 50 if (i .eq. 6 .and. j .eq. 7) exit outer ! { dg-error "EXIT statement" } 51 end do 52 end do outer 53 last: do i = 1, 30 54 end do last 55 56 ! different types of loop are allowed 57 !$acc loop 58 do i = 1,10 59 end do 60 !$acc loop 61 do 400, i = 1,10 62400 a(i) = i 63 64 ! after loop directive must be loop 65 !$acc loop 66 a(1) = 1 ! { dg-error "Expected DO loop" } 67 do i = 1,10 68 enddo 69 70 ! combined directives may be used with/without end 71 !$acc parallel loop 72 do i = 1,10 73 enddo 74 !$acc parallel loop 75 do i = 1,10 76 enddo 77 !$acc end parallel loop 78 !$acc kernels loop 79 do i = 1,10 80 enddo 81 !$acc kernels loop 82 do i = 1,10 83 enddo 84 !$acc end kernels loop 85 86 !$acc kernels loop reduction(max:i) 87 do i = 1,10 88 enddo 89 !$acc kernels 90 !$acc loop reduction(max:i) 91 do i = 1,10 92 enddo 93 !$acc end kernels 94 95 !$acc parallel loop collapse(0) ! { dg-error "constant positive integer" } 96 do i = 1,10 97 enddo 98 99 !$acc parallel loop collapse(-1) ! { dg-error "constant positive integer" } 100 do i = 1,10 101 enddo 102 103 !$acc parallel loop collapse(i) ! { dg-error "Constant expression required" } 104 do i = 1,10 105 enddo 106 107 !$acc parallel loop collapse(4) ! { dg-error "not enough DO loops for collapsed" } 108 do i = 1, 3 109 do j = 4, 6 110 do k = 5, 7 111 a(i+j-k) = i + j + k 112 end do 113 end do 114 end do 115 !$acc parallel loop collapse(2) 116 do i = 1, 5, 2 117 do j = i + 1, 7, i ! { dg-error "collapsed loops don.t form rectangular iteration space" } 118 end do 119 end do 120 !$acc parallel loop collapse(2) 121 do i = 1, 3 122 do j = 4, 6 123 end do 124 end do 125 !$acc parallel loop collapse(2) 126 do i = 1, 3 127 do j = 4, 6 128 end do 129 k = 4 130 end do 131 !$acc parallel loop collapse(3-1) 132 do i = 1, 3 133 do j = 4, 6 134 end do 135 k = 4 136 end do 137 !$acc parallel loop collapse(1+1) 138 do i = 1, 3 139 do j = 4, 6 140 end do 141 k = 4 142 end do 143 !$acc parallel loop collapse(2) 144 do i = 1, 3 145 do ! { dg-error "cannot be a DO WHILE or DO without loop control" } 146 end do 147 end do 148 !$acc parallel loop collapse(2) 149 do i = 1, 3 150 do r = 4, 6 151 end do 152 ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 150 } 153 end do 154 155 !$acc loop independent seq 156 do i = 1,10 157 enddo 158 159 160 !$acc cache (a(1:10)) ! { dg-error "ACC CACHE directive must be inside of loop" } 161 162 do i = 1,10 163 !$acc cache(a(i:i+1)) 164 enddo 165 166 do i = 1,10 167 !$acc cache(a(i:i+1)) 168 a(i) = i 169 !$acc cache(a(i+2:i+2+1)) 170 enddo 171 172end subroutine test1 173end module test 174