1program lastprivate 2 integer :: i 3 common /c/ i 4 !$omp parallel num_threads (4) 5 call test1 6 !$omp end parallel 7 if (i .ne. 21) call abort 8 !$omp parallel num_threads (4) 9 call test2 10 !$omp end parallel 11 if (i .ne. 64) call abort 12 !$omp parallel num_threads (4) 13 call test3 14 !$omp end parallel 15 if (i .ne. 14) call abort 16 call test4 17 call test5 18 call test6 19 call test7 20 call test8 21 call test9 22 call test10 23 call test11 24 call test12 25contains 26 subroutine test1 27 integer :: i 28 common /c/ i 29 !$omp do lastprivate (i) 30 do i = 1, 20 31 end do 32 end subroutine test1 33 subroutine test2 34 integer :: i 35 common /c/ i 36 !$omp do lastprivate (i) 37 do i = 7, 61, 3 38 end do 39 end subroutine test2 40 function ret3 () 41 integer :: ret3 42 ret3 = 3 43 end function ret3 44 subroutine test3 45 integer :: i 46 common /c/ i 47 !$omp do lastprivate (i) 48 do i = -10, 11, ret3 () 49 end do 50 end subroutine test3 51 subroutine test4 52 integer :: j 53 !$omp parallel do lastprivate (j) num_threads (4) default (none) 54 do j = 1, 20 55 end do 56 if (j .ne. 21) call abort 57 end subroutine test4 58 subroutine test5 59 integer :: j 60 !$omp parallel do lastprivate (j) num_threads (4) default (none) 61 do j = 7, 61, 3 62 end do 63 if (j .ne. 64) call abort 64 end subroutine test5 65 subroutine test6 66 integer :: j 67 !$omp parallel do lastprivate (j) num_threads (4) default (none) 68 do j = -10, 11, ret3 () 69 end do 70 if (j .ne. 14) call abort 71 end subroutine test6 72 subroutine test7 73 integer :: i 74 common /c/ i 75 !$omp parallel do lastprivate (i) num_threads (4) default (none) 76 do i = 1, 20 77 end do 78 if (i .ne. 21) call abort 79 end subroutine test7 80 subroutine test8 81 integer :: i 82 common /c/ i 83 !$omp parallel do lastprivate (i) num_threads (4) default (none) 84 do i = 7, 61, 3 85 end do 86 if (i .ne. 64) call abort 87 end subroutine test8 88 subroutine test9 89 integer :: i 90 common /c/ i 91 !$omp parallel do lastprivate (i) num_threads (4) default (none) 92 do i = -10, 11, ret3 () 93 end do 94 if (i .ne. 14) call abort 95 end subroutine test9 96 subroutine test10 97 integer :: i 98 common /c/ i 99 !$omp parallel num_threads (4) default (none) shared (i) 100 !$omp do lastprivate (i) 101 do i = 1, 20 102 end do 103 !$omp end parallel 104 if (i .ne. 21) call abort 105 end subroutine test10 106 subroutine test11 107 integer :: i 108 common /c/ i 109 !$omp parallel num_threads (4) default (none) shared (i) 110 !$omp do lastprivate (i) 111 do i = 7, 61, 3 112 end do 113 !$omp end parallel 114 if (i .ne. 64) call abort 115 end subroutine test11 116 subroutine test12 117 integer :: i 118 common /c/ i 119 !$omp parallel num_threads (4) default (none) shared (i) 120 !$omp do lastprivate (i) 121 do i = -10, 11, ret3 () 122 end do 123 !$omp end parallel 124 if (i .ne. 14) call abort 125 end subroutine test12 126end program lastprivate 127