blob: 6d7e11eab00e2e06d7bccb59f30d38e88d7b4619 [file] [log] [blame]
program lastprivate
integer :: i, k
common /c/ i, k
!$omp parallel num_threads (4)
call test1
!$omp end parallel
if (i .ne. 21 .or. k .ne. 20) call abort
!$omp parallel num_threads (4)
call test2
!$omp end parallel
if (i .ne. 64 .or. k .ne. 61) call abort
!$omp parallel num_threads (4)
call test3
!$omp end parallel
if (i .ne. 14 .or. k .ne. 11) call abort
call test4
call test5
call test6
call test7
call test8
call test9
call test10
call test11
call test12
contains
subroutine test1
integer :: i, k
common /c/ i, k
!$omp do lastprivate (i, k)
do i = 1, 20
k = i
end do
end subroutine test1
subroutine test2
integer :: i, k
common /c/ i, k
!$omp do lastprivate (i, k)
do i = 7, 61, 3
k = i
end do
end subroutine test2
function ret3 ()
integer :: ret3
ret3 = 3
end function ret3
subroutine test3
integer :: i, k
common /c/ i, k
!$omp do lastprivate (i, k)
do i = -10, 11, ret3 ()
k = i
end do
end subroutine test3
subroutine test4
integer :: j, l
!$omp parallel do lastprivate (j, l) num_threads (4)
do j = 1, 20
l = j
end do
if (j .ne. 21 .or. l .ne. 20) call abort
end subroutine test4
subroutine test5
integer :: j, l
l = 77
!$omp parallel do lastprivate (j, l) num_threads (4) firstprivate (l)
do j = 7, 61, 3
l = j
end do
if (j .ne. 64 .or. l .ne. 61) call abort
end subroutine test5
subroutine test6
integer :: j, l
!$omp parallel do lastprivate (j, l) num_threads (4)
do j = -10, 11, ret3 ()
l = j
end do
if (j .ne. 14 .or. l .ne. 11) call abort
end subroutine test6
subroutine test7
integer :: i, k
common /c/ i, k
!$omp parallel do lastprivate (i, k) num_threads (4)
do i = 1, 20
k = i
end do
if (i .ne. 21 .or. k .ne. 20) call abort
end subroutine test7
subroutine test8
integer :: i, k
common /c/ i, k
!$omp parallel do lastprivate (i, k) num_threads (4)
do i = 7, 61, 3
k = i
end do
if (i .ne. 64 .or. k .ne. 61) call abort
end subroutine test8
subroutine test9
integer :: i, k
common /c/ i, k
k = 77
!$omp parallel do lastprivate (i, k) num_threads (4) firstprivate (k)
do i = -10, 11, ret3 ()
k = i
end do
if (i .ne. 14 .or. k .ne. 11) call abort
end subroutine test9
subroutine test10
integer :: i, k
common /c/ i, k
!$omp parallel num_threads (4)
!$omp do lastprivate (i, k)
do i = 1, 20
k = i
end do
!$omp end parallel
if (i .ne. 21 .or. k .ne. 20) call abort
end subroutine test10
subroutine test11
integer :: i, k
common /c/ i, k
!$omp parallel num_threads (4)
!$omp do lastprivate (i, k)
do i = 7, 61, 3
k = i
end do
!$omp end parallel
if (i .ne. 64 .or. k .ne. 61) call abort
end subroutine test11
subroutine test12
integer :: i, k
common /c/ i, k
k = 77
!$omp parallel num_threads (4)
!$omp do lastprivate (i, k) firstprivate (k)
do i = -10, 11, ret3 ()
k = i
end do
!$omp end parallel
if (i .ne. 14 .or. k .ne. 11) call abort
end subroutine test12
end program lastprivate