281e33e1bb
PR fortran/42162 * trans-openmp.c (gfc_trans_omp_do): When dovar isn't a VAR_DECL, don't use simple loop and handle clauses properly. * testsuite/libgomp.fortran/pr42162.f90: New test. From-SVN: r154654
54 lines
921 B
Fortran
54 lines
921 B
Fortran
! PR fortran/42162
|
|
! { dg-do run }
|
|
|
|
subroutine sub1(k, a)
|
|
implicit none
|
|
integer :: k, a(3)
|
|
!$omp do
|
|
do k=1,3
|
|
a(k) = a(k) + 1
|
|
enddo
|
|
!$omp end do
|
|
end subroutine sub1
|
|
|
|
subroutine sub2(k, a)
|
|
implicit none
|
|
integer :: k, a(3)
|
|
!$omp do private (k)
|
|
do k=1,3
|
|
a(k) = a(k) + 1
|
|
enddo
|
|
!$omp end do
|
|
end subroutine sub2
|
|
|
|
subroutine sub3(k, a)
|
|
implicit none
|
|
integer :: k, a(3)
|
|
!$omp do lastprivate (k)
|
|
do k=1,3
|
|
a(k) = a(k) + 1
|
|
enddo
|
|
!$omp end do
|
|
end subroutine sub3
|
|
|
|
program pr42162
|
|
implicit none
|
|
integer :: k, a(3), b(3), c(3)
|
|
a = 1
|
|
b = 2
|
|
c = 3
|
|
k = 3
|
|
!$omp parallel num_threads(3)
|
|
call sub1 (k, a)
|
|
!$omp end parallel
|
|
k = 4
|
|
!$omp parallel num_threads(3)
|
|
call sub2 (k, b)
|
|
!$omp end parallel
|
|
k = 10
|
|
!$omp parallel num_threads(3)
|
|
call sub3 (k, c)
|
|
!$omp end parallel
|
|
if (k.ne.4.or.any(a.ne.2).or.any(b.ne.3).or.any(c.ne.4)) call abort
|
|
end
|