xref: /llvm-project/openmp/runtime/test/api/omp_in_explicit_task.c (revision 1fbdb03b1d2cb2ec9a3c84445db57b570a6e5d9a)
1*1fbdb03bSAndreyChurbanov // RUN: %libomp-compile-and-run
2*1fbdb03bSAndreyChurbanov 
3*1fbdb03bSAndreyChurbanov #include <stdio.h>
4*1fbdb03bSAndreyChurbanov #include <stdlib.h>
5*1fbdb03bSAndreyChurbanov #include <omp.h>
6*1fbdb03bSAndreyChurbanov 
main()7*1fbdb03bSAndreyChurbanov int main()
8*1fbdb03bSAndreyChurbanov {
9*1fbdb03bSAndreyChurbanov   int res;
10*1fbdb03bSAndreyChurbanov   res = omp_in_explicit_task();
11*1fbdb03bSAndreyChurbanov   if (res) {
12*1fbdb03bSAndreyChurbanov     printf("error: omp_in_explicit_task: serial1 returned %d\n", res);
13*1fbdb03bSAndreyChurbanov     return 1;
14*1fbdb03bSAndreyChurbanov   }
15*1fbdb03bSAndreyChurbanov   #pragma omp parallel num_threads(2)
16*1fbdb03bSAndreyChurbanov   {
17*1fbdb03bSAndreyChurbanov     int r = omp_in_explicit_task();
18*1fbdb03bSAndreyChurbanov     if (r) {
19*1fbdb03bSAndreyChurbanov       printf("error: omp_in_explicit_task: par #%d returned %d\n",
20*1fbdb03bSAndreyChurbanov              omp_get_thread_num(), r);
21*1fbdb03bSAndreyChurbanov       exit(1);
22*1fbdb03bSAndreyChurbanov     }
23*1fbdb03bSAndreyChurbanov     #pragma omp task
24*1fbdb03bSAndreyChurbanov     {
25*1fbdb03bSAndreyChurbanov       int r = omp_in_explicit_task();
26*1fbdb03bSAndreyChurbanov       if (!r) {
27*1fbdb03bSAndreyChurbanov         printf("error: omp_in_explicit_task: task1 #%d returned %d\n",
28*1fbdb03bSAndreyChurbanov                omp_get_thread_num(), r);
29*1fbdb03bSAndreyChurbanov         exit(1);
30*1fbdb03bSAndreyChurbanov       }
31*1fbdb03bSAndreyChurbanov     }
32*1fbdb03bSAndreyChurbanov     #pragma omp task
33*1fbdb03bSAndreyChurbanov     {
34*1fbdb03bSAndreyChurbanov       int r = omp_in_explicit_task();
35*1fbdb03bSAndreyChurbanov       if (!r) {
36*1fbdb03bSAndreyChurbanov         printf("error: omp_in_explicit_task: task2 #%d returned %d\n",
37*1fbdb03bSAndreyChurbanov                omp_get_thread_num(), r);
38*1fbdb03bSAndreyChurbanov         exit(1);
39*1fbdb03bSAndreyChurbanov       }
40*1fbdb03bSAndreyChurbanov     }
41*1fbdb03bSAndreyChurbanov   }
42*1fbdb03bSAndreyChurbanov   res = omp_in_explicit_task();
43*1fbdb03bSAndreyChurbanov   if (res) {
44*1fbdb03bSAndreyChurbanov     printf("error: omp_in_explicit_task: serial2 returned %d\n", res);
45*1fbdb03bSAndreyChurbanov     return 1;
46*1fbdb03bSAndreyChurbanov   }
47*1fbdb03bSAndreyChurbanov   printf("passed\n");
48*1fbdb03bSAndreyChurbanov   return 0;
49*1fbdb03bSAndreyChurbanov }
50