extern "C" void abort (void);
struct S { int e, f; };

void
foo (int *&p, int (&s)[5], int &t, S &u, int n)
{
  int a[4] = { 7, 8, 9, 10 }, b[n], c[3] = { 20, 21, 22 };
  int *r = a + 1, *q = p - 1, i, err;
  int v = 27;
  S w = { 28, 29 };
  for (i = 0; i < n; i++)
    b[i] = 9 + i;
  #pragma omp target data map(to:a)
  #pragma omp target data use_device_ptr(r) map(from:err)
  #pragma omp target is_device_ptr(r) private(i) map(from:err)
  {
    err = 0;
    for (i = 0; i < 4; i++)
      if (r[i - 1] != 7 + i)
	err = 1;
  }
  if (err)
    abort ();
  #pragma omp target data map(to:q[:4])
  #pragma omp target data use_device_ptr(p) map(from:err)
  #pragma omp target is_device_ptr(p) private(i) map(from:err)
  {
    err = 0;
    for (i = 0; i < 4; i++)
      if (p[i - 1] != i)
	err = 1;
  }
  if (err)
    abort ();
  #pragma omp target data map(to:b)
  #pragma omp target data use_device_addr(b) map(from:err)
  #pragma omp target is_device_ptr(b) private(i) map(from:err)
  {
    err = 0;
    for (i = 0; i < n; i++)
      if (b[i] != 9 + i)
	err = 1;
  }
  if (err)
    abort ();
  #pragma omp target data map(to:c)
  #pragma omp target data use_device_addr(c) map(from:err)
  #pragma omp target is_device_ptr(c) private(i) map(from:err)
  {
    err = 0;
    for (i = 0; i < 3; i++)
      if (c[i] != 20 + i)
	err = 1;
  }
  if (err)
    abort ();
  #pragma omp target data map(to:s[:5])
  #pragma omp target data use_device_addr(s) map(from:err)
  #pragma omp target is_device_ptr(s) private(i) map(from:err)
  {
    err = 0;
    for (i = 0; i < 5; i++)
      if (s[i] != 17 + i)
	err = 1;
  }
  if (err)
    abort ();
  #pragma omp target data map(to: v) map(to:u)
  #pragma omp target data use_device_addr (v) use_device_addr (u) map(from:err)
  {
    int *z = &v;
    S *x = &u;
    #pragma omp target is_device_ptr (z, x) map(from:err)
    {
      err = 0;
      if (*z != 27 || x->e != 25 || x->f != 26)
	err = 1;
    }
  }
  if (err)
    abort ();
  #pragma omp target data map(to: t, w)
  #pragma omp target data use_device_addr (t, w) map(from:err)
  {
    int *z = &t;
    S *x = &w;
    #pragma omp target is_device_ptr (z) is_device_ptr (x) map(from:err)
    {
      err = 0;
      if (*z != 24 || x->e != 28 || x->f != 29)
	err = 1;
    }
  }
  if (err)
    abort ();
}

int
main ()
{
  int a[4] = { 0, 1, 2, 3 }, b[5] = { 17, 18, 19, 20, 21 };
  int *p = a + 1;
  int t = 24;
  S u = { 25, 26 };
  foo (p, b, t, u, 9);
}
