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