! See also loop-1-2.f95. module test implicit none 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-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 32 } ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 32 } !$acc loop do d = 1, 30, 5 i = d a(i) = 2 end do ! { dg-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 38 } ! { 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-warning "Deleted feature: Loop variable at .1. must be integer" "" { target *-*-* } 151 } ! { dg-error "ACC LOOP iteration variable must be of type integer" "" { target *-*-* } 151 } end do ! Both seq and independent are not allowed !$acc loop independent seq ! { dg-error "SEQ conflicts with INDEPENDENT" } 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 module test