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