|  | ! { dg-do run } | 
|  | ! { dg-options "-std=legacy" } | 
|  |  | 
|  | program collapse2 | 
|  | call test1 | 
|  | call test2 | 
|  | contains | 
|  | subroutine test1 | 
|  | integer :: i, j, k, a(1:3, 4:6, 5:7) | 
|  | logical :: l | 
|  | l = .false. | 
|  | a(:, :, :) = 0 | 
|  | !$omp parallel do collapse(4 - 1) schedule(static, 4) | 
|  | do 164 i = 1, 3 | 
|  | do 164 j = 4, 6 | 
|  | do 164 k = 5, 7 | 
|  | a(i, j, k) = i + j + k | 
|  | 164      end do | 
|  | !$omp parallel do collapse(2) reduction(.or.:l) | 
|  | firstdo: do i = 1, 3 | 
|  | do j = 4, 6 | 
|  | do k = 5, 7 | 
|  | if (a(i, j, k) .ne. (i + j + k)) l = .true. | 
|  | end do | 
|  | end do | 
|  | end do firstdo | 
|  | !$omp end parallel do | 
|  | if (l) stop 1 | 
|  | end subroutine test1 | 
|  |  | 
|  | subroutine test2 | 
|  | integer :: a(3,3,3), k, kk, kkk, l, ll, lll | 
|  | !$omp do collapse(3) | 
|  | do 115 k=1,3 | 
|  | dokk: do kk=1,3 | 
|  | do kkk=1,3 | 
|  | a(k,kk,kkk) = 1 | 
|  | enddo | 
|  | enddo dokk | 
|  | 115   continue | 
|  | if (any(a(1:3,1:3,1:3).ne.1)) stop 2 | 
|  |  | 
|  | !$omp do collapse(3) | 
|  | dol: do 120 l=1,3 | 
|  | doll: do ll=1,3 | 
|  | do lll=1,3 | 
|  | a(l,ll,lll) = 2 | 
|  | enddo | 
|  | enddo doll | 
|  | 120   end do dol | 
|  | if (any(a(1:3,1:3,1:3).ne.2)) stop 3 | 
|  | end subroutine test2 | 
|  |  | 
|  | end program collapse2 |