(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
no_create-4.c
       1  /* Test 'no_create' clause on 'data' construct and nested compute construct,
       2     with data present on the device.  */
       3  
       4  #include <stdlib.h>
       5  #include <stdio.h>
       6  #include <openacc.h>
       7  
       8  #define N 128
       9  
      10  int
      11  main (int argc, char *argv[])
      12  {
      13    int var;
      14    int *arr = (int *) malloc (N * sizeof (*arr));
      15    int *devptr[2];
      16  
      17    acc_copyin (&var, sizeof (var));
      18    acc_copyin (arr, N * sizeof (*arr));
      19  
      20  #pragma acc data no_create(var, arr[0:N])
      21    {
      22      devptr[0] = (int *) acc_deviceptr (&var);
      23      devptr[1] = (int *) acc_deviceptr (&arr[2]);
      24  
      25      if (devptr[0] == NULL)
      26        __builtin_abort ();
      27      if (devptr[1] == NULL)
      28        __builtin_abort ();
      29  
      30      if (acc_hostptr (devptr[0]) != (void *) &var)
      31        __builtin_abort ();
      32      if (acc_hostptr (devptr[1]) != (void *) &arr[2])
      33        __builtin_abort ();
      34  
      35  #if ACC_MEM_SHARED
      36      if (devptr[0] != &var)
      37        __builtin_abort ();
      38      if (devptr[1] != &arr[2])
      39        __builtin_abort ();
      40  #else
      41      if (devptr[0] == &var)
      42        __builtin_abort ();
      43      if (devptr[1] == &arr[2])
      44        __builtin_abort ();
      45  #endif
      46  
      47  #pragma acc parallel copyout(devptr)
      48      {
      49        devptr[0] = &var;
      50        devptr[1] = &arr[2];
      51      }
      52  
      53      if (devptr[0] == NULL)
      54        __builtin_abort ();
      55      if (devptr[1] == NULL)
      56        __builtin_abort ();
      57  
      58      if (acc_hostptr (devptr[0]) != (void *) &var)
      59        __builtin_abort ();
      60      if (acc_hostptr (devptr[1]) != (void *) &arr[2])
      61        __builtin_abort ();
      62  
      63  #if ACC_MEM_SHARED
      64      if (devptr[0] != &var)
      65        __builtin_abort ();
      66      if (devptr[1] != &arr[2])
      67        __builtin_abort ();
      68  #else
      69      if (devptr[0] == &var)
      70        __builtin_abort ();
      71      if (devptr[1] == &arr[2])
      72        __builtin_abort ();
      73  #endif
      74    }
      75  
      76    acc_delete (&var, sizeof (var));
      77    acc_delete (arr, N * sizeof (*arr));
      78  
      79    free (arr);
      80  
      81    return 0;
      82  }