/* PR libgomp/29947 */

/* { dg-do run } */

extern void abort (void);

int cnt;

void
test1 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (dynamic)
    for (i = j1; i <= k1; ++i)
      {
	if (i < j2 || i > k2)
	  ++e;
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test2 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (dynamic)
    for (i = k1; i >= j1; --i)
      {
	if (i < j2 || i > k2)
	  ++e;
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test3 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (guided)
    for (i = j1; i <= k1; ++i)
      {
	if (i < j2 || i > k2)
	  ++e;
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test4 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (guided)
    for (i = k1; i >= j1; --i)
      {
	if (i < j2 || i > k2)
	  ++e;
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test5 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (dynamic) ordered
    for (i = j1; i <= k1; ++i)
      {
	if (i < j2 || i > k2)
	  ++e;
#pragma omp ordered
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test6 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (dynamic) ordered
    for (i = k1; i >= j1; --i)
      {
	if (i < j2 || i > k2)
	  ++e;
#pragma omp ordered
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test7 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (guided) ordered
    for (i = j1; i <= k1; ++i)
      {
	if (i < j2 || i > k2)
	  ++e;
#pragma omp ordered
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test8 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel reduction (+:e,c)
  {
#pragma omp for schedule (guided) ordered
    for (i = k1; i >= j1; --i)
      {
	if (i < j2 || i > k2)
	  ++e;
#pragma omp ordered
	++c;
      }
#pragma omp atomic
    ++cnt;
  }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test9 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (dynamic)
  for (i = j1; i <= k1; ++i)
    {
      if (i < j2 || i > k2)
	++e;
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test10 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (dynamic)
  for (i = k1; i >= j1; --i)
    {
      if (i < j2 || i > k2)
	++e;
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test11 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (guided)
  for (i = j1; i <= k1; ++i)
    {
      if (i < j2 || i > k2)
	++e;
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test12 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (guided)
  for (i = k1; i >= j1; --i)
    {
      if (i < j2 || i > k2)
	++e;
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test13 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
  for (i = j1; i <= k1; ++i)
    {
      if (i < j2 || i > k2)
	++e;
#pragma omp ordered
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test14 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (dynamic) ordered
  for (i = k1; i >= j1; --i)
    {
      if (i < j2 || i > k2)
	++e;
#pragma omp ordered
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test15 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
  for (i = j1; i <= k1; ++i)
    {
      if (i < j2 || i > k2)
	++e;
#pragma omp ordered
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

void
test16 (long j1, long k1, long j2, long k2)
{
  long i, e = 0, c = 0;
#pragma omp parallel for reduction (+:e,c) schedule (guided) ordered
  for (i = k1; i >= j1; --i)
    {
      if (i < j2 || i > k2)
	++e;
#pragma omp ordered
      ++c;
    }
  if (e || (c != j2 > k2 ? 0 : k2 - j2 + 1))
    abort ();
}

int
__attribute__((noinline))
test (long j1, long k1, long j2, long k2)
{
  test1 (j1, k1, j2, k2);
  test2 (j1, k1, j2, k2);
  test3 (j1, k1, j2, k2);
  test4 (j1, k1, j2, k2);
  test5 (j1, k1, j2, k2);
  test6 (j1, k1, j2, k2);
  test7 (j1, k1, j2, k2);
  test8 (j1, k1, j2, k2);
  test9 (j1, k1, j2, k2);
  test10 (j1, k1, j2, k2);
  test11 (j1, k1, j2, k2);
  test12 (j1, k1, j2, k2);
  test13 (j1, k1, j2, k2);
  test14 (j1, k1, j2, k2);
  test15 (j1, k1, j2, k2);
  test16 (j1, k1, j2, k2);
  return cnt;
}

int
main (void)
{
  test (1, 5, 1, 5);
  test (5, 5, 5, 5);
  test (5, 4, 5, 4);
  test (5, 1, 5, 1);
  return 0;
}
