1! { dg-do run }
2
3  integer, parameter :: n = 1000
4  integer, parameter :: c = 100
5  integer :: i, j
6  real :: a(n)
7  do i = 1, n
8    a(i) = i
9  end do
10  !$omp parallel
11  !$omp single
12  do i = 1, n, c
13    !$omp task shared(a)
14      !$omp target map(a(i:i+c-1))
15        !$omp parallel do
16          do j = i, i + c - 1
17            a(j) = foo (a(j))
18          end do
19      !$omp end target
20    !$omp end task
21  end do
22  !$omp end single
23  !$omp end parallel
24  do i = 1, n
25    if (a(i) /= i + 1) STOP 1
26  end do
27contains
28  real function foo (x)
29    !$omp declare target
30    real, intent(in) :: x
31    foo = x + 1
32  end function foo
33end
34