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