/* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */

#include <assert.h>
#include <openacc.h>
#include <stdint.h>

int
main ()
{
  int data;
  int *data_p_dev = (int *) acc_create (&data, sizeof data);
  int *data_p = &data;
  uintptr_t ptrbits;

  acc_copyin (&data_p, sizeof data_p);

  /* Test attach/detach directives.  */
#pragma acc enter data attach(data_p)
#pragma acc serial copyout(ptrbits) /* { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } } */
  {
    ptrbits = (uintptr_t) data_p;
  }
#pragma acc exit data detach(data_p)
  assert ((void *) ptrbits == data_p_dev);

  acc_update_self (&data_p, sizeof data_p);
  assert (data_p == &data);

  /* Test attach/detach API call.  */
  acc_attach ((void **) &data_p);
#pragma acc serial copyout(ptrbits) /* { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } } */
  {
    ptrbits = (uintptr_t) data_p;
  }
  acc_detach ((void **) &data_p);

  assert ((void *) ptrbits == data_p_dev);
  acc_update_self (&data_p, sizeof data_p);
  assert (data_p == &data);

  acc_delete (&data_p, sizeof data_p);
  acc_delete (&data, sizeof data);

  return 0;
}

