#include <stdlib.h>

int x;
long long y;
int r, s, t;

void
foo (const char *a)
{
  #pragma omp sections lastprivate (conditional: x, y)
  {
    if (a[0])
      x = a[0];
    #pragma omp section
    {
      if (a[1])
	x = a[1];
      if (a[2])
	y = a[2];
    }
    #pragma omp section
    if (a[3])
      y = a[3];
    #pragma omp section
    if (a[4])
      x = a[4];
    #pragma omp section
    {
      if (a[5])
	x = a[5];
      if (a[6])
	y = a[6];
    }
  }
}

void
bar (const char *a)
{
  #pragma omp sections lastprivate (conditional: x, y) reduction (task, +: t)
  {
    if (a[0])
      x = a[0];
    #pragma omp section
    {
      if (a[1])
	x = a[1];
      if (a[2])
	y = a[2];
      #pragma omp task in_reduction (+: t)
      t++;
    }
    #pragma omp section
    if (a[3])
      y = a[3];
    #pragma omp section
    if (a[4])
      x = a[4];
    #pragma omp section
    {
      #pragma omp task in_reduction (+: t)
      ++t;
      if (a[5])
	x = a[5];
      if (a[6])
	y = a[6];
    }
  }
}

void
baz (const char *a)
{
  #pragma omp sections lastprivate (conditional: x, y) reduction (+: r, s)
  {
    if (a[0])
      x = a[0];
    #pragma omp section
    {
      if (a[1])
	x = a[1];
      ++r;
      ++s;
      if (a[2])
	y = a[2];
    }
    #pragma omp section
    if (a[3])
      y = a[3];
    #pragma omp section
    {
      ++s;
      if (a[4])
	x = a[4];
    }
    #pragma omp section
    {
      if (a[5])
	x = a[5];
      if (a[6])
	y = a[6];
      ++s;
    }
  }
}

int
main ()
{
  #pragma omp parallel
  {
    foo ("\0\1\2\3\0\5");
    if (x != 5 || y != 3)
      abort ();
    #pragma omp barrier
    foo ("\6\0\0\0\0\0\7");
    if (x != 6 || y != 7)
      abort ();
    #pragma omp barrier
    foo ("\7\6\5\4\3\2\1");
    if (x != 2 || y != 1)
      abort ();
    #pragma omp barrier
    foo ("\0\0\4\3\0\7");
    if (x != 7 || y != 3)
      abort ();
    #pragma omp barrier
    bar ("\0\1\2\4\0\5");
    if (x != 5 || y != 4 || t != 2)
      abort ();
    #pragma omp barrier
    bar ("\6\0\0\0\0\0\7");
    if (x != 6 || y != 7 || t != 4)
      abort ();
    #pragma omp barrier
    bar ("\7\6\5\4\3\2\1");
    if (x != 2 || y != 1 || t != 6)
      abort ();
    #pragma omp barrier
    bar ("\0\0\4\3\0\7");
    if (x != 7 || y != 3 || t != 8)
      abort ();
    #pragma omp barrier
    baz ("\0\1\2\4\0\5");
    if (x != 5 || y != 4 || r != 1 || s != 3)
      abort ();
    #pragma omp barrier
    baz ("\6\0\0\0\0\0\7");
    if (x != 6 || y != 7 || r != 2 || s != 6)
      abort ();
    #pragma omp barrier
    baz ("\7\6\5\4\3\2\1");
    if (x != 2 || y != 1 || r != 3 || s != 9)
      abort ();
    #pragma omp barrier
    baz ("\0\0\4\3\0\7");
    if (x != 7 || y != 3 || r != 4 || s != 12)
      abort ();
  }
  return 0;
}
