extern "C" void abort ();

int as[2];
int (&a)[2] = as;
long long int bs[7] = { 9, 11, 1, 1, 1, 13, 15 };
long long int (&b)[7] = bs;
int es[3] = { 5, 0, 5 };
int (&e)[3] = es;
int fs[5] = { 6, 7, 0, 0, 9 };
int (&f)[5] = fs;
int gs[4] = { 1, 0, 0, 2 };
int (&g)[4] = gs;
int hs[3] = { 0, 1, 4 };
int (&h)[3] = hs;
int ks[4][2] = { { 5, 6 }, { 0, 0 }, { 0, 0 }, { 7, 8 } };
int (&k)[4][2] = ks;
long long *ss;
long long *&s = ss;
long long (*ts)[2];
long long (*&t)[2] = ts;
struct U { U (); ~U () {}; U (const U &); int u[4]; };

U::U
()
{
  u[0] = 0; u[1] = 1; u[2] = 2; u[3] = 3;
}

U::U
(const U &r)
{
  u[0] = r.u[0]; u[1] = r.u[1]; u[2] = r.u[2]; u[3] = r.u[3];
}

void
foo (int &n, int *&c, long long int *&d, int (&m)[3], int *&r, int (&o)[4], int *&p, int (&q)[4][2])
{
  int i;
  U u;
  u.u[2] = 8;
  #pragma omp taskloop in_reduction (+: a, c[ :2]) in_reduction (*: b[2 * n:3 * n], d[0:2]) \
		       in_reduction (+: o[n:n*2], m[1], k[1:2][ : ], p[0], f[2:2]) \
		       in_reduction (+: q[1:2][ : ], g[n:n*2], e[1], h[0], r[2:2]) \
		       in_reduction (*: s[1:2], t[2:2][ : ]) firstprivate (u) nogroup
  for (i = 0; i < 2; i++)
    {
      a[0] += 7;
      a[1] += 17;
      b[2] *= 2;
      b[4] *= 2;
      c[0] += 6;
      d[1] *= 2;
      e[1] += 19;
      f[2] += 21;
      f[3] += 23;
      g[1] += 25;
      g[2] += 27;
      h[0] += 29;
      k[1][0] += 31;
      k[2][1] += 33;
      m[1] += 19;
      r[2] += 21;
      r[3] += 23;
      o[1] += 25;
      o[2] += 27;
      p[0] += 29;
      q[1][0] += 31;
      q[2][1] += 33;
      s[1] *= 2;
      t[2][0] *= 2;
      t[3][1] *= 2;
      if (u.u[2] != 8)
	abort ();
    }
}

void
test (int &n)
{
  int cs[2] = { 0, 0 };
  int (&c)[2] = cs;
  int ps[3] = { 0, 1, 4 };
  int (&p)[3] = ps;
  int qs[4][2] = { { 5, 6 }, { 0, 0 }, { 0, 0 }, { 7, 8 } };
  int (&q)[4][2] = qs;
  long long sb[4] = { 5, 1, 1, 6 };
  long long tb[5][2] = { { 9, 10 }, { 11, 12 }, { 1, 1 }, { 1, 1 }, { 13, 14 } };
  int ms[3] = { 5, 0, 5 };
  int os[4] = { 1, 0, 0, 2 };
  s = sb;
  t = tb;
  U u;
  u.u[2] = 10;
  #pragma omp parallel
  #pragma omp single
  {
    long long int ds[] = { 1, 1 };
    long long int (&d)[2] = ds;
    int (&m)[3] = ms;
    int rs[5] = { 6, 7, 0, 0, 9 };
    int (&r)[5] = rs;
    int (&o)[4] = os;
    int i;
    #pragma omp taskloop reduction (+: a, c) reduction (*: b[2 * n:3 * n], d) \
			 reduction (+: e[1], f[2:2], g[n:n*2], h[0], k[1:2][0:2]) \
			 reduction (+: o[n:n*2], m[1], q[1:2][ : ], p[0], r[2:2]) \
			 reduction (*: t[2:2][ : ], s[1:n + 1]) firstprivate (u)
    for (i = 0; i < 4; i++)
      {
	int j;
	a[0] += 2;
	a[1] += 3;
	b[2] *= 2;
	f[3] += 8;
	g[1] += 9;
	g[2] += 10;
	h[0] += 11;
	k[1][1] += 13;
	k[2][1] += 15;
	m[1] += 16;
	r[2] += 8;
	s[1] *= 2;
	t[2][1] *= 2;
	t[3][1] *= 2;
	if (u.u[2] != 10)
	  abort ();
	for (j = 0; j < 2; j++)
	  #pragma omp task in_reduction (+: a, c[ :2]) \
			   in_reduction (*: b[2 * n:3 * n], d[n - 1:n + 1]) \
			   in_reduction (+: e[1], f[2:2], g[n:n*2], h[0], k[1:2][ :2]) \
			   in_reduction (+: m[1], r[2:2], o[n:n*2], p[0], q[1:2][ :2]) \
			   in_reduction (*: s[n:2], t[2:2][ : ]) firstprivate (u)
	  {
	    m[1] += 6;
	    r[2] += 7;
	    q[1][0] += 17;
	    q[2][0] += 19;
	    a[0] += 4;
	    a[1] += 5;
	    b[3] *= 2;
	    b[4] *= 2;
	    f[3] += 18;
	    g[1] += 29;
	    g[2] += 18;
	    h[0] += 19;
	    s[2] *= 2;
	    t[2][0] *= 2;
	    t[3][0] *= 2;
	    int *cp = c;
	    long long int *dp = d;
	    int *rp = r;
	    int *pp = p;
	    foo (n, cp, dp, m, rp, o, pp, q);
	    if (u.u[2] != 10)
	      abort ();
	    r[3] += 18;
	    o[1] += 29;
	    o[2] += 18;
	    p[0] += 19;
	    c[0] += 4;
	    c[1] += 5;
	    d[0] *= 2;
	    e[1] += 6;
	    f[2] += 7;
	    k[1][0] += 17;
	    k[2][0] += 19;
	  }
	r[3] += 8;
	o[1] += 9;
	o[2] += 10;
	p[0] += 11;
	q[1][1] += 13;
	q[2][1] += 15;
	b[3] *= 2;
	c[0] += 4;
	c[1] += 9;
	d[0] *= 2;
	e[1] += 16;
	f[2] += 8;
      }
    if (d[0] != 1LL << (8 + 4)
	|| d[1] != 1LL << 16
	|| m[0] != 5
	|| m[1] != 19 * 16 + 6 * 8 + 16 * 4
	|| m[2] != 5
	|| r[0] != 6
	|| r[1] != 7
	|| r[2] != 21 * 16 + 7 * 8 + 8 * 4
	|| r[3] != 23 * 16 + 18 * 8 + 8 * 4
	|| r[4] != 9
	|| o[0] != 1
	|| o[1] != 25 * 16 + 29 * 8 + 9 * 4
	|| o[2] != 27 * 16 + 18 * 8 + 10 * 4
	|| o[3] != 2)
      abort ();
  }
  if (a[0] != 7 * 16 + 4 * 8 + 2 * 4
      || a[1] != 17 * 16 + 5 * 8 + 3 * 4
      || b[0] != 9 || b[1] != 11
      || b[2] != 1LL << (16 + 4)
      || b[3] != 1LL << (8 + 4)
      || b[4] != 1LL << (16 + 8)
      || b[5] != 13 || b[6] != 15
      || c[0] != 6 * 16 + 4 * 8 + 4 * 4
      || c[1] != 5 * 8 + 9 * 4
      || e[0] != 5
      || e[1] != 19 * 16 + 6 * 8 + 16 * 4
      || e[2] != 5
      || f[0] != 6
      || f[1] != 7
      || f[2] != 21 * 16 + 7 * 8 + 8 * 4
      || f[3] != 23 * 16 + 18 * 8 + 8 * 4
      || f[4] != 9
      || g[0] != 1
      || g[1] != 25 * 16 + 29 * 8 + 9 * 4
      || g[2] != 27 * 16 + 18 * 8 + 10 * 4
      || g[3] != 2
      || h[0] != 29 * 16 + 19 * 8 + 11 * 4
      || h[1] != 1 || h[2] != 4
      || k[0][0] != 5 || k[0][1] != 6
      || k[1][0] != 31 * 16 + 17 * 8
      || k[1][1] != 13 * 4
      || k[2][0] != 19 * 8
      || k[2][1] != 33 * 16 + 15 * 4
      || k[3][0] != 7 || k[3][1] != 8
      || p[0] != 29 * 16 + 19 * 8 + 11 * 4
      || p[1] != 1 || p[2] != 4
      || q[0][0] != 5 || q[0][1] != 6
      || q[1][0] != 31 * 16 + 17 * 8
      || q[1][1] != 13 * 4
      || q[2][0] != 19 * 8
      || q[2][1] != 33 * 16 + 15 * 4
      || q[3][0] != 7 || q[3][1] != 8
      || sb[0] != 5
      || sb[1] != 1LL << (16 + 4)
      || sb[2] != 1LL << 8
      || sb[3] != 6
      || tb[0][0] != 9 || tb[0][1] != 10 || tb[1][0] != 11 || tb[1][1] != 12
      || tb[2][0] != 1LL << (16 + 8)
      || tb[2][1] != 1LL << 4
      || tb[3][0] != 1LL << 8
      || tb[3][1] != 1LL << (16 + 4)
      || tb[4][0] != 13 || tb[4][1] != 14)
    abort ();
}

int
main ()
{
  int n = 1;
  test (n);
  return 0;
}
