(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
target-39.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O0" } */
       3  
       4  extern void abort (void);
       5  volatile int v;
       6  #pragma omp declare target to (v)
       7  typedef void (*fnp1) (void);
       8  typedef fnp1 (*fnp2) (void);
       9  void f1 (void) { v++; }
      10  void f2 (void) { v += 4; }
      11  void f3 (void) { v += 16; f1 (); }
      12  fnp1 f4 (void) { v += 64; return f2; }
      13  int a = 1;
      14  int *b = &a;
      15  int **c = &b;
      16  fnp2 f5 (void) { f3 (); return f4; }
      17  #pragma omp declare target to (c, f5)
      18  
      19  int
      20  main ()
      21  {
      22    int err = 0;
      23    #pragma omp target map(from:err)
      24    {
      25      volatile int xa;
      26      int *volatile xb;
      27      int **volatile xc;
      28      fnp2 xd;
      29      fnp1 xe;
      30      err = 0;
      31      xa = a;
      32      err |= xa != 1;
      33      xb = b;
      34      err |= xb != &a;
      35      xc = c;
      36      err |= xc != &b;
      37      xd = f5 ();
      38      err |= v != 17;
      39      xe = xd ();
      40      err |= v != 81;
      41      xe ();
      42      err |= v != 85;
      43    }
      44    if (err)
      45      abort ();
      46    return 0;
      47  }