(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
target-is-accessible-1.c
       1  #include <omp.h>
       2  
       3  int
       4  main ()
       5  {
       6    int d = omp_get_default_device ();
       7    int id = omp_get_initial_device ();
       8    int n = omp_get_num_devices ();
       9    void *p;
      10  
      11    if (d < 0 || d >= n)
      12      d = id;
      13  
      14    if (!omp_target_is_accessible (p, sizeof (int), n))
      15      __builtin_abort ();
      16  
      17    if (!omp_target_is_accessible (p, sizeof (int), id))
      18      __builtin_abort ();
      19  
      20    if (!omp_target_is_accessible (p, sizeof (int), omp_initial_device))
      21      __builtin_abort ();
      22  
      23    if (omp_target_is_accessible (p, sizeof (int), -5))
      24      __builtin_abort ();
      25  
      26    if (omp_target_is_accessible (p, sizeof (int), n + 1))
      27      __builtin_abort ();
      28  
      29    /* Currently, a host pointer is accessible if the device supports shared
      30       memory or omp_target_is_accessible is executed on the host. This
      31       test case must be adapted when unified shared memory is avialable.  */
      32    int a[128];
      33    for (int d = 0; d <= omp_get_num_devices (); d++)
      34      {
      35        int shared_mem = 0;
      36        #pragma omp target map (alloc: shared_mem) device (d)
      37  	shared_mem = 1;
      38        if (omp_target_is_accessible (p, sizeof (int), d) != shared_mem)
      39  	__builtin_abort ();
      40  
      41        if (omp_target_is_accessible (a, 128 * sizeof (int), d) != shared_mem)
      42  	__builtin_abort ();
      43  
      44        for (int i = 0; i < 128; i++)
      45  	if (omp_target_is_accessible (&a[i], sizeof (int), d) != shared_mem)
      46  	  __builtin_abort ();
      47      }
      48  
      49    return 0;
      50  }