(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
deep-copy-8.c
       1  /* { dg-do run { target { ! openacc_host_selected } } } */
       2  
       3  #include <stdlib.h>
       4  #include <assert.h>
       5  #include <openacc.h>
       6  
       7  struct dc
       8  {
       9    int a;
      10    int *b;
      11    int *c;
      12    int *d;
      13  };
      14  
      15  int
      16  main ()
      17  {
      18    int n = 100, i, j, k;
      19    struct dc v = { .a = 3 };
      20  
      21    v.b = (int *) malloc (sizeof (int) * n);
      22    v.c = (int *) malloc (sizeof (int) * n);
      23    v.d = (int *) malloc (sizeof (int) * n);
      24  
      25  #pragma acc enter data copyin(v)
      26  
      27    for (k = 0; k < 16; k++)
      28      {
      29  #pragma acc enter data copyin(v.a, v.b[:n], v.c[:n], v.d[:n])
      30  
      31  #pragma acc parallel loop
      32        for (i = 0; i < n; i++)
      33  	v.b[i] = v.a + i;
      34  
      35  #pragma acc exit data copyout(v.b[:n])
      36  #pragma acc exit data copyout(v.c[:n])
      37  #pragma acc exit data copyout(v.d[:n])
      38  #pragma acc exit data copyout(v.a)
      39  
      40        for (i = 0; i < n; i++)
      41  	assert (v.b[i] == v.a + i);
      42  
      43        assert (acc_is_present (&v, sizeof (v)));
      44        assert (!acc_is_present (v.b, sizeof (int) * n));
      45        assert (!acc_is_present (v.c, sizeof (int) * n));
      46        assert (!acc_is_present (v.d, sizeof (int) * n));
      47      }
      48  
      49  #pragma acc exit data copyout(v)
      50  
      51    assert (!acc_is_present (&v, sizeof (v)));
      52  
      53    return 0;
      54  }