| ! PR fortran/42162 |
| ! { dg-do run } |
| |
| subroutine sub1(k, a) |
| implicit none |
| integer :: k, a(3) |
| !$omp do |
| do k=1,3 |
| a(k) = a(k) + 1 |
| enddo |
| !$omp end do |
| end subroutine sub1 |
| |
| subroutine sub2(k, a) |
| implicit none |
| integer :: k, a(3) |
| !$omp do private (k) |
| do k=1,3 |
| a(k) = a(k) + 1 |
| enddo |
| !$omp end do |
| end subroutine sub2 |
| |
| subroutine sub3(k, a) |
| implicit none |
| integer :: k, a(3) |
| !$omp do lastprivate (k) |
| do k=1,3 |
| a(k) = a(k) + 1 |
| enddo |
| !$omp end do |
| end subroutine sub3 |
| |
| program pr42162 |
| implicit none |
| integer :: k, a(3), b(3), c(3) |
| a = 1 |
| b = 2 |
| c = 3 |
| k = 3 |
| !$omp parallel num_threads(3) |
| call sub1 (k, a) |
| !$omp end parallel |
| k = 4 |
| !$omp parallel num_threads(3) |
| call sub2 (k, b) |
| !$omp end parallel |
| k = 10 |
| !$omp parallel num_threads(3) |
| call sub3 (k, c) |
| !$omp end parallel |
| if (k.ne.4.or.any(a.ne.2).or.any(b.ne.3).or.any(c.ne.4)) call abort |
| end |