1 /* { dg-do run } */
2
3 #include <omp.h>
4 #include <stdlib.h>
5
6 int
7 main ()
8 {
9 if (omp_in_explicit_task ())
10 abort ();
11 #pragma omp task
12 if (!omp_in_explicit_task ())
13 abort ();
14 #pragma omp task final (1)
15 {
16 if (!omp_in_explicit_task ())
17 abort ();
18 #pragma omp task
19 if (!omp_in_explicit_task ())
20 abort ();
21 }
22 #pragma omp parallel
23 {
24 if (omp_in_explicit_task ())
25 abort ();
26 #pragma omp task if (0)
27 {
28 if (!omp_in_explicit_task ())
29 abort ();
30 #pragma omp task if (0)
31 if (!omp_in_explicit_task ())
32 abort ();
33 }
34 #pragma omp task final (1)
35 if (!omp_in_explicit_task ())
36 abort ();
37 #pragma omp barrier
38 if (omp_in_explicit_task ())
39 abort ();
40 #pragma omp taskloop num_tasks (24)
41 for (int i = 0; i < 32; ++i)
42 if (!omp_in_explicit_task ())
43 abort ();
44 #pragma omp masked
45 #pragma omp task
46 if (!omp_in_explicit_task ())
47 abort ();
48 #pragma omp barrier
49 if (omp_in_explicit_task ())
50 abort ();
51 }
52 #pragma omp target
53 {
54 if (omp_in_explicit_task ())
55 abort ();
56 #pragma omp task if (0)
57 if (!omp_in_explicit_task ())
58 abort ();
59 #pragma omp task
60 if (!omp_in_explicit_task ())
61 abort ();
62 }
63 #pragma omp target teams
64 {
65 #pragma omp distribute
66 for (int i = 0; i < 4; ++i)
67 if (omp_in_explicit_task ())
68 abort ();
69 else
70 {
71 #pragma omp parallel
72 {
73 if (omp_in_explicit_task ())
74 abort ();
75 #pragma omp task
76 if (!omp_in_explicit_task ())
77 abort ();
78 #pragma omp barrier
79 if (omp_in_explicit_task ())
80 abort ();
81 }
82 }
83 }
84 #pragma omp teams
85 {
86 #pragma omp distribute
87 for (int i = 0; i < 4; ++i)
88 if (omp_in_explicit_task ())
89 abort ();
90 else
91 {
92 #pragma omp parallel
93 {
94 if (omp_in_explicit_task ())
95 abort ();
96 #pragma omp task
97 if (!omp_in_explicit_task ())
98 abort ();
99 #pragma omp barrier
100 if (omp_in_explicit_task ())
101 abort ();
102 }
103 }
104 }
105 return 0;
106 }