142 lines
3.2 KiB
Fortran
142 lines
3.2 KiB
Fortran
! { dg-do run }
|
|
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) stop 1
|
|
!$omp parallel num_threads (4)
|
|
call test2
|
|
!$omp end parallel
|
|
if (i .ne. 64 .or. k .ne. 61) stop 2
|
|
!$omp parallel num_threads (4)
|
|
call test3
|
|
!$omp end parallel
|
|
if (i .ne. 14 .or. k .ne. 11) stop 3
|
|
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) stop 4
|
|
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) stop 5
|
|
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) stop 6
|
|
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) stop 7
|
|
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) stop 8
|
|
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) stop 9
|
|
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) stop 10
|
|
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) stop 11
|
|
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) stop 12
|
|
end subroutine test12
|
|
end program lastprivate
|