1/* PR middle-end/36802 */
2
3extern void abort (void);
4extern int omp_set_dynamic (int);
5extern void omp_set_nested (int);
6extern int omp_get_num_threads (void);
7
8int q;
9
10int
11foo (int k)
12{
13  int i = 6, n = 0;
14  omp_set_dynamic (0);
15  omp_set_nested (1);
16#pragma omp parallel shared (i) num_threads (3)
17  {
18    int l;
19
20    if (omp_get_num_threads () != 3)
21    #pragma omp atomic
22      n += 1;
23    else
24    #pragma omp for
25      for (l = 0; l < 3; l++)
26	if (!k)
27	#pragma omp parallel shared (i) num_threads (4)
28	  {
29	    if (omp_get_num_threads () != 4)
30	    #pragma omp atomic
31	      n += 1;
32	    #pragma omp critical
33	      i += 1;
34	  }
35	else
36	#pragma omp atomic
37	  q += i;
38  }
39  if (n == 0 && i != 6 + 3 * 4)
40    abort ();
41  return 0;
42}
43
44int
45main (void)
46{
47  foo (0);
48  return 0;
49}
50