extern
#ifdef __cplusplus
"C"
#endif
void abort (void);
int a, b[3] = { 1, 1, 1 };
unsigned long int c[2] = { ~0UL, ~0UL };

void
bar (int i)
{
  #pragma omp task in_reduction (*: b[ :3]) in_reduction (&: c[1: ]) \
	      in_reduction (+: a)
  {
    a += 4;
    b[1] *= 4;
    c[1] &= ~(1UL << (i + 16));
  }
}

void
foo (int x)
{
  #pragma omp scope reduction (task, +: a)
  {
    #pragma omp scope reduction (task, *: b)
    {
      #pragma omp scope reduction (task, &: c[1:1])
      {
	#pragma omp barrier
	#pragma omp sections
	{
	  {
	    a++; b[0] *= 2; bar (2); b[2] *= 3; c[1] &= ~(1UL << 2);
	  }
	#pragma omp section
	{ b[0] *= 2; bar (4); b[2] *= 3; c[1] &= ~(1UL << 4); a++; }
	#pragma omp section
	{ bar (6); b[2] *= 3; c[1] &= ~(1UL << 6); a++; b[0] *= 2; }
	#pragma omp section
	{ b[2] *= 3; c[1] &= ~(1UL << 8); a++; b[0] *= 2; bar (8); }
	#pragma omp section
	{ c[1] &= ~(1UL << 10); a++; b[0] *= 2; bar (10); b[2] *= 3; }
	#pragma omp section
	{ a++; b[0] *= 2; b[2] *= 3; c[1] &= ~(1UL << 12); bar (12); }
	#pragma omp section
	if (x)
	  {
	    a++; b[0] *= 2; b[2] *= 3; bar (14); c[1] &= ~(1UL << 14);
	  }
	}
      }
    }
  }
}

int
main ()
{
  volatile int one = 1;
  foo (!one);
  if (a != 30 || b[0] != 64 || b[1] != (1 << 12) || b[2] != 3 * 3 * 3 * 3 * 3 * 3
      || c[0] != ~0UL || c[1] != ~0x15541554UL)
    abort ();
  a = 0;
  b[0] = 1;
  b[1] = 1;
  b[2] = 1;
  c[1] = ~0UL;
  #pragma omp parallel
  foo (one);
  if (a != 35 || b[0] != 128 || b[1] != (1 << 14) || b[2] != 3 * 3 * 3 * 3 * 3 * 3 * 3
      || c[0] != ~0UL || c[1] != ~0x55545554UL)
    abort ();
  return 0;
}
