1! { dg-do run }
2program foo
3  integer :: i, j, k
4  integer :: a(10), c(10)
5  k = 2
6  a(:) = 0
7  call test1
8  call test2
9  do i = 1, 10
10    if (a(i) .ne. 10 * i) stop 1
11  end do
12  !$omp parallel do reduction (+:c)
13  do i = 1, 10
14    c = c + a
15  end do
16  do i = 1, 10
17    if (c(i) .ne. 10 * a(i)) stop 2
18  end do
19  !$omp parallel do lastprivate (j)
20  do j = 1, 10, k
21  end do
22  if (j .ne. 11) stop 3
23contains
24  subroutine test1
25    integer :: i
26    integer :: b(10)
27    do i = 1, 10
28      b(i) = i
29    end do
30    c(:) = 0
31    !$omp parallel do reduction (+:a)
32    do i = 1, 10
33      a = a + b
34    end do
35  end subroutine test1
36  subroutine test2
37    !$omp parallel do lastprivate (j)
38    do j = 1, 10, k
39    end do
40    if (j .ne. 11) stop 4
41  end subroutine test2
42end program foo
43