(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
mdc-refcount-1.c
       1  /* { dg-skip-if "" { *-*-* } { "-DACC_MEM_SHARED=1" } } */
       2  
       3  #include <openacc.h>
       4  #include <assert.h>
       5  
       6  #define N 1024
       7  
       8  struct mystr {
       9    int *data;
      10  };
      11  
      12  static void
      13  test (unsigned variant)
      14  {
      15    int arr[N];
      16    struct mystr s;
      17  
      18    s.data = arr;
      19  
      20    acc_copyin (&s, sizeof (s));
      21    acc_create (s.data, N * sizeof (int));
      22  
      23    for (int i = 0; i < 20; i++)
      24      {
      25        if ((variant + i) % 1)
      26  	{
      27  #pragma acc enter data attach(s.data)
      28  	}
      29        else
      30  	acc_attach ((void **) &s.data);
      31  
      32        if ((variant + i) % 2)
      33  	{
      34  #pragma acc exit data detach(s.data)
      35  	}
      36        else
      37  	acc_detach ((void **) &s.data);
      38      }
      39  
      40    assert (acc_is_present (arr, N * sizeof (int)));
      41    assert (acc_is_present (&s, sizeof (s)));
      42  
      43    acc_delete (arr, N * sizeof (int));
      44  
      45    assert (!acc_is_present (arr, N * sizeof (int)));
      46  
      47    acc_copyout (&s, sizeof (s));
      48  
      49    assert (!acc_is_present (&s, sizeof (s)));
      50    assert (s.data == arr);
      51  }
      52  
      53  int
      54  main (int argc, char *argv[])
      55  {
      56    for (unsigned variant = 0; variant < 4; ++variant)
      57      test (variant);
      58  
      59    return 0;
      60  }