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