(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
enter_exit-lib.c
       1  /* Verify enter/exit data interoperability between pragmas and
       2     acc library calls.  */
       3  
       4  /* { dg-do run } */
       5  
       6  #include <stdlib.h>
       7  #include <assert.h>
       8  #include <openacc.h>
       9  
      10  int
      11  main ()
      12  {
      13    int *p = (int *)malloc (sizeof (int));
      14  
      15    /* Test 1: pragma input, library output.  */
      16    
      17  #pragma acc enter data copyin (p[0:1])
      18  
      19  #pragma acc parallel present (p[0:1]) num_gangs (1)
      20    {
      21      p[0] = 1;
      22    }
      23  
      24    acc_copyout (p, sizeof (int));
      25  
      26    assert (p[0] == 1);
      27    
      28    /* Test 2: library input, pragma output.  */
      29  
      30    acc_copyin (p, sizeof (int));
      31  
      32  #pragma acc parallel present (p[0:1]) num_gangs (1)
      33    {
      34      p[0] = 2;
      35    }
      36  
      37  #pragma acc exit data copyout (p[0:1])
      38    
      39    assert (p[0] == 2);
      40  
      41    /* Test 3: library input, library output.  */
      42  
      43    acc_copyin (p, sizeof (int));
      44  
      45  #pragma acc parallel present (p[0:1]) num_gangs (1)
      46    {
      47      p[0] = 3;
      48    }
      49  
      50    acc_copyout (p, sizeof (int));
      51    
      52    assert (p[0] == 3);
      53  
      54    /* Test 4: pragma input, pragma output.  */
      55  
      56  #pragma acc enter data copyin (p[0:1])
      57    
      58  #pragma acc parallel present (p[0:1]) num_gangs (1)
      59    {
      60      p[0] = 3;
      61    }
      62  
      63  #pragma acc exit data copyout (p[0:1])
      64    
      65    assert (p[0] == 3);
      66    
      67    free (p);
      68  
      69    return 0;
      70  }