/* PR middle-end/36802 */

extern void abort (void);
extern int omp_set_dynamic (int);
extern void omp_set_nested (int);
extern int omp_get_num_threads (void);

int q;

int
foo (int k)
{
  int i = 6, n = 0;
  omp_set_dynamic (0);
  omp_set_nested (1);
#pragma omp parallel shared (i) num_threads (3)
  {
    int l;

    if (omp_get_num_threads () != 3)
    #pragma omp atomic
      n += 1;
    else
    #pragma omp for
      for (l = 0; l < 3; l++)
	if (!k)
	#pragma omp parallel shared (i) num_threads (4)
	  {
	    if (omp_get_num_threads () != 4)
	    #pragma omp atomic
	      n += 1;
	    #pragma omp critical
	      i += 1;
	  }
	else
	#pragma omp atomic
	  q += i;
  }
  if (n == 0 && i != 6 + 3 * 4)
    abort ();
  return 0;
}

int
main (void)
{
  foo (0);
  return 0;
}
