program lastprivate integer :: i common /c/ i !$omp parallel num_threads (4) call test1 !$omp end parallel if (i .ne. 21) call abort !$omp parallel num_threads (4) call test2 !$omp end parallel if (i .ne. 64) call abort !$omp parallel num_threads (4) call test3 !$omp end parallel if (i .ne. 14) 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 common /c/ i !$omp do lastprivate (i) do i = 1, 20 end do end subroutine test1 subroutine test2 integer :: i common /c/ i !$omp do lastprivate (i) do i = 7, 61, 3 end do end subroutine test2 function ret3 () integer :: ret3 ret3 = 3 end function ret3 subroutine test3 integer :: i common /c/ i !$omp do lastprivate (i) do i = -10, 11, ret3 () end do end subroutine test3 subroutine test4 integer :: j !$omp parallel do lastprivate (j) num_threads (4) default (none) do j = 1, 20 end do if (j .ne. 21) call abort end subroutine test4 subroutine test5 integer :: j !$omp parallel do lastprivate (j) num_threads (4) default (none) do j = 7, 61, 3 end do if (j .ne. 64) call abort end subroutine test5 subroutine test6 integer :: j !$omp parallel do lastprivate (j) num_threads (4) default (none) do j = -10, 11, ret3 () end do if (j .ne. 14) call abort end subroutine test6 subroutine test7 integer :: i common /c/ i !$omp parallel do lastprivate (i) num_threads (4) default (none) do i = 1, 20 end do if (i .ne. 21) call abort end subroutine test7 subroutine test8 integer :: i common /c/ i !$omp parallel do lastprivate (i) num_threads (4) default (none) do i = 7, 61, 3 end do if (i .ne. 64) call abort end subroutine test8 subroutine test9 integer :: i common /c/ i !$omp parallel do lastprivate (i) num_threads (4) default (none) do i = -10, 11, ret3 () end do if (i .ne. 14) call abort end subroutine test9 subroutine test10 integer :: i common /c/ i !$omp parallel num_threads (4) default (none) shared (i) !$omp do lastprivate (i) do i = 1, 20 end do !$omp end parallel if (i .ne. 21) call abort end subroutine test10 subroutine test11 integer :: i common /c/ i !$omp parallel num_threads (4) default (none) shared (i) !$omp do lastprivate (i) do i = 7, 61, 3 end do !$omp end parallel if (i .ne. 64) call abort end subroutine test11 subroutine test12 integer :: i common /c/ i !$omp parallel num_threads (4) default (none) shared (i) !$omp do lastprivate (i) do i = -10, 11, ret3 () end do !$omp end parallel if (i .ne. 14) call abort end subroutine test12 end program lastprivate