extern "C" void abort ();

struct S { S (); S (long int, long int); ~S (); static int cnt1, cnt2, cnt3; long int s, t; };

int S::cnt1;
int S::cnt2;
int S::cnt3;

S::S ()
{
  #pragma omp atomic
  cnt1++;
}

S::S (long int x, long int y) : s (x), t (y)
{
  #pragma omp atomic update
  ++cnt2;
}

S::~S ()
{
  #pragma omp atomic
  cnt3 = cnt3 + 1;
  if (t < 3 || t > 9 || (t & 1) == 0)
    abort ();
}

void
bar (S *p, S *o)
{
  p->s = 1;
  if (o->t != 5)
    abort ();
  p->t = 9;
}

static inline void
baz (S *o, S *i)
{
  if (o->t != 5 || i->t != 9)
    abort ();
  o->s *= i->s;
}

#pragma omp declare reduction (+: S : omp_out.s += omp_in.s) initializer (omp_priv (0, 3))
#pragma omp declare reduction (*: S : baz (&omp_out, &omp_in)) initializer (bar (&omp_priv, &omp_orig))

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

template <typename S, typename T>
void
foo (T &n, S *&c, S *&d, S (&m)[3], S *&r, S (&o)[4], S *&p, S (&q)[4][2])
{
  T i;
  for (i = 0; i < 2; i++)
    #pragma omp task 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][ : ])
    {
      a[0].s += 7;
      a[1].s += 17;
      b[2].s *= 2;
      b[4].s *= 2;
      c[0].s += 6;
      d[1].s *= 2;
      e[1].s += 19;
      f[2].s += 21;
      f[3].s += 23;
      g[1].s += 25;
      g[2].s += 27;
      h[0].s += 29;
      k[1][0].s += 31;
      k[2][1].s += 33;
      m[1].s += 19;
      r[2].s += 21;
      r[3].s += 23;
      o[1].s += 25;
      o[2].s += 27;
      p[0].s += 29;
      q[1][0].s += 31;
      q[2][1].s += 33;
      s[1].s *= 2;
      t[2][0].s *= 2;
      t[3][1].s *= 2;
      if ((e[1].t != 7 && e[1].t != 3) || (h[0].t != 7 && h[0].t != 3)
	  || (m[1].t != 7 && m[1].t != 3) || (p[0].t != 7 && p[0].t != 3))
	abort ();
      for (T z = 0; z < 2; z++)
	if ((a[z].t != 7 && a[z].t != 3) || (c[z].t != 7 && c[z].t != 3)
	    || (d[z].t != 5 && d[z].t != 9) || (f[z + 2].t != 7 && f[z + 2].t != 3)
	    || (g[z + 1].t != 7 && g[z + 1].t != 3) || (r[z + 2].t != 7 && r[z + 2].t != 3)
	    || (s[z + 1].t != 5 && s[z + 1].t != 9) || (o[z + 1].t != 7 && o[z + 1].t != 3)
	    || (k[z + 1][0].t != 7 && k[z + 1][0].t != 3) || (k[z + 1][1].t != 7 && k[z + 1][1].t != 3)
	    || (q[z + 1][0].t != 7 && q[z + 1][0].t != 3) || (q[z + 1][1].t != 7 && q[z + 1][1].t != 3)
	    || (t[z + 2][0].t != 5 && t[z + 2][0].t != 9) || (t[z + 2][1].t != 5 && t[z + 2][1].t != 9))
	  abort ();
      for (T z = 0; z < 3; z++)
	if (b[z + 2].t != 5 && b[z + 2].t != 9)
	  abort ();
    }
}

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

int
main ()
{
  int c1 = S::cnt1, c2 = S::cnt2, c3 = S::cnt3;
  int n = 1;
  test<S, int> (n);
  if (S::cnt1 + S::cnt2 - c1 - c2 != S::cnt3 - c3)
    abort ();
  return 0;
}
