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