1! { dg-do run }
2
3program collapse2
4  call test1
5  call test2
6contains
7  subroutine test1
8    integer :: i, j, k, a(1:3, 4:6, 5:7)
9    logical :: l
10    l = .false.
11    a(:, :, :) = 0
12    !$omp parallel do collapse(4 - 1) schedule(static, 4)
13      do 164 i = 1, 3
14        do 164 j = 4, 6
15          do 164 k = 5, 7
16            a(i, j, k) = i + j + k
17164      end do
18    !$omp parallel do collapse(2) reduction(.or.:l)
19firstdo: do i = 1, 3
20        do j = 4, 6
21          do k = 5, 7
22            if (a(i, j, k) .ne. (i + j + k)) l = .true.
23          end do
24        end do
25      end do firstdo
26    !$omp end parallel do
27    if (l) STOP 1
28  end subroutine test1
29
30  subroutine test2
31    integer :: a(3,3,3), k, kk, kkk, l, ll, lll
32    !$omp do collapse(3)
33      do 115 k=1,3
34  dokk: do kk=1,3
35          do kkk=1,3
36            a(k,kk,kkk) = 1
37          enddo
38        enddo dokk
39115   continue
40    if (any(a(1:3,1:3,1:3).ne.1)) STOP 2
41
42    !$omp do collapse(3)
43 dol: do 120 l=1,3
44  doll: do ll=1,3
45          do lll=1,3
46            a(l,ll,lll) = 2
47          enddo
48        enddo doll
49120   end do dol
50    if (any(a(1:3,1:3,1:3).ne.2)) STOP 3
51  end subroutine test2
52
53end program collapse2
54