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