! { 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 () .ne. acc_device_host) 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) STOP 1
  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) STOP 2
  if (d .ne. 5) STOP 3
end program firstprivate