1! PR fortran/42162
2! { dg-do run }
3
4subroutine sub1(k, a)
5  implicit none
6  integer :: k, a(3)
7  !$omp do
8    do k=1,3
9      a(k) = a(k) + 1
10    enddo
11  !$omp end do
12end subroutine sub1
13
14subroutine sub2(k, a)
15  implicit none
16  integer :: k, a(3)
17  !$omp do private (k)
18    do k=1,3
19      a(k) = a(k) + 1
20    enddo
21  !$omp end do
22end subroutine sub2
23
24subroutine sub3(k, a)
25  implicit none
26  integer :: k, a(3)
27  !$omp do lastprivate (k)
28    do k=1,3
29      a(k) = a(k) + 1
30    enddo
31  !$omp end do
32end subroutine sub3
33
34program pr42162
35  implicit none
36  integer :: k, a(3), b(3), c(3)
37  a = 1
38  b = 2
39  c = 3
40  k = 3
41  !$omp parallel num_threads(3)
42  call sub1 (k, a)
43  !$omp end parallel
44  k = 4
45  !$omp parallel num_threads(3)
46  call sub2 (k, b)
47  !$omp end parallel
48  k = 10
49  !$omp parallel num_threads(3)
50  call sub3 (k, c)
51  !$omp end parallel
52  if (k.ne.4.or.any(a.ne.2).or.any(b.ne.3).or.any(c.ne.4)) stop 1
53end
54