(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
target-21.c
       1  extern void abort (void);
       2  union U { int x; long long y; };
       3  struct T { int a; union U b; int c; };
       4  struct S { int s; int u; struct T v; int x[10]; union U w; int y[10]; int z[10]; };
       5  volatile int z;
       6  
       7  int
       8  main ()
       9  {
      10    struct S s;
      11    s.s = 0;
      12    s.u = 1;
      13    s.v.a = 2;
      14    s.v.b.y = 3LL;
      15    s.v.c = 19;
      16    s.w.x = 4;
      17    s.x[0] = 7;
      18    s.x[1] = 8;
      19    s.y[3] = 9;
      20    s.y[4] = 10;
      21    s.y[5] = 11;
      22    int err = 0;
      23    #pragma omp target map (to:s.v.b, s.u, s.x[0:z + 2]) \
      24  		     map (tofrom:s.y[3:3]) \
      25  		     map (from: s.w, s.z[z + 1:z + 3], err)
      26    {
      27      err = 0;
      28      if (s.u != 1 || s.v.b.y != 3LL || s.x[0] != 7 || s.x[1] != 8
      29  	|| s.y[3] != 9 || s.y[4] != 10 || s.y[5] != 11)
      30        err = 1;
      31      s.w.x = 6;
      32      s.y[3] = 12;
      33      s.y[4] = 13;
      34      s.y[5] = 14;
      35      s.z[1] = 15;
      36      s.z[2] = 16;
      37      s.z[3] = 17;
      38    }
      39    if (err || s.w.x != 6 || s.y[3] != 12 || s.y[4] != 13 || s.y[5] != 14
      40        || s.z[1] != 15 || s.z[2] != 16 || s.z[3] != 17)
      41      abort ();
      42    s.u++;
      43    s.v.a++;
      44    s.v.b.y++;
      45    s.w.x++;
      46    s.x[1] = 18;
      47    s.z[0] = 19;
      48    #pragma omp target data map (tofrom: s)
      49    #pragma omp target map (always to: s.w, s.x[1], err) map (alloc:s.u, s.v.b, s.z[z:z + 1])
      50    {
      51      err = 0;
      52      if (s.u != 2 || s.v.b.y != 4LL || s.w.x != 7 || s.x[1] != 18 || s.z[0] != 19)
      53        err = 1;
      54      s.w.x = 8;
      55      s.x[1] = 20;
      56      s.z[0] = 21;
      57    }
      58    if (err || s.w.x != 8 || s.x[1] != 20 || s.z[0] != 21)
      59      abort ();
      60    s.u++;
      61    s.v.a++;
      62    s.v.b.y++;
      63    s.w.x++;
      64    s.x[0] = 22;
      65    s.x[1] = 23;
      66    #pragma omp target data map (from: s.w, s.x[0:2]) map (to: s.v.b, s.u)
      67    #pragma omp target map (always to: s.w, s.x[0:2], err) map (alloc:s.u, s.v.b)
      68    {
      69      err = 0;
      70      if (s.u != 3 || s.v.b.y != 5LL || s.w.x != 9 || s.x[0] != 22 || s.x[1] != 23)
      71        err = 1;
      72      s.w.x = 11;
      73      s.x[0] = 24;
      74      s.x[1] = 25;
      75    }
      76    if (err || s.w.x != 11 || s.x[0] != 24 || s.x[1] != 25)
      77      abort ();
      78    return 0;
      79  }