(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
pr92984-1.c
       1  /* Verify that 'acc_delete' etc. with zero size is a no-op.  */
       2  
       3  #include <assert.h>
       4  #include <stdlib.h>
       5  #include <openacc.h>
       6  
       7  
       8  #define UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
       9  
      10  
      11  static void
      12  verify_mapped_unchanged (unsigned char *a, size_t N)
      13  {
      14    assert (acc_is_present (a, N));
      15  
      16    for (size_t i = 0; i < N; ++i)
      17      assert (a[i] == (unsigned char) i);
      18  }
      19  
      20  int
      21  main (int argc, char **argv)
      22  {
      23    const size_t N = 256;
      24  
      25    unsigned char *a = (unsigned char *) malloc (N);
      26    assert (a);
      27  
      28    for (size_t i = 0; i < N; ++i)
      29      a[i] = 51;
      30  
      31    void *a_d = acc_copyin (a, N);
      32    assert (a_d);
      33  
      34    for (size_t i = 0; i < N; ++i)
      35      a[i] = i;
      36  
      37    int async = 0;
      38  
      39    const size_t size = 0;
      40  
      41  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      42  #pragma acc exit data copyout (a[0:size])
      43    verify_mapped_unchanged (a, N);
      44  #endif
      45    acc_copyout (a, size);
      46    verify_mapped_unchanged (a, N);
      47  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      48  #pragma acc exit data copyout (a[0:size]) async (async++)
      49    verify_mapped_unchanged (a, N);
      50  #endif
      51    acc_copyout_async (a, size, async++);
      52    verify_mapped_unchanged (a, N);
      53  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      54  #pragma acc exit data copyout (a[0:size]) finalize
      55    verify_mapped_unchanged (a, N);
      56  #endif
      57    acc_copyout_finalize (a, size);
      58    verify_mapped_unchanged (a, N);
      59  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      60  #pragma acc exit data copyout (a[0:size]) finalize async (async++)
      61    verify_mapped_unchanged (a, N);
      62  #endif
      63    acc_copyout_finalize_async (a, size, async++);
      64    verify_mapped_unchanged (a, N);
      65  
      66  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      67  #pragma acc exit data delete (a[0:size])
      68    verify_mapped_unchanged (a, N);
      69  #endif
      70    acc_delete (a, size);
      71    verify_mapped_unchanged (a, N);
      72  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      73  #pragma acc exit data delete (a[0:size]) async (async++)
      74    verify_mapped_unchanged (a, N);
      75  #endif
      76    acc_delete_async (a, size, async++);
      77    verify_mapped_unchanged (a, N);
      78  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      79  #pragma acc exit data delete (a[0:size]) finalize
      80    verify_mapped_unchanged (a, N);
      81  #endif
      82    acc_delete_finalize (a, size);
      83    verify_mapped_unchanged (a, N);
      84  #ifndef UNHANDLED_GOMP_MAP_ZERO_LEN_ARRAY_SECTION
      85  #pragma acc exit data delete (a[0:size]) finalize async (async++)
      86    verify_mapped_unchanged (a, N);
      87  #endif
      88    acc_delete_finalize_async (a, size, async++);
      89    verify_mapped_unchanged (a, N);
      90  
      91    acc_wait_all ();
      92  
      93    acc_delete (a, N);
      94  #if !ACC_MEM_SHARED
      95    assert (!acc_is_present (a, N));
      96  #endif
      97    free (a);
      98  
      99    return 0;
     100  }