aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.oacc-c-c++-common/pr95270-1.c
blob: 4a13663b6091a6c50386e98c87a1998217e7300d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* { 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;
}