! { dg-do run } program firstprivate integer, parameter :: Nupper=100 integer :: a, b(Nupper), c, d, n include "openacc_lib.h" if (acc_get_device_type () .eq. acc_device_nvidia) then n = Nupper else n = 1 end if b(:) = -1 a = 5 !$acc parallel firstprivate (a) num_gangs (n) !$acc loop gang do i = 1, n a = a + i b(i) = a end do !$acc end parallel do i = 1, n if (b(i) .ne. i + a) call abort () end do !$acc data copy (a) !$acc parallel firstprivate (a) copyout (c) a = 10 c = a !$acc end parallel !$acc parallel copyout (d) present (a) d = a !$acc end parallel !$acc end data if (c .ne. 10) call abort () if (d .ne. 5) call abort () end program firstprivate