1 /* { dg-do run } */
2 /* { dg-set-target-env-var OMP_CANCELLATION "true" } */
3
4 #include <stdlib.h>
5 #include <omp.h>
6
7 int
8 main ()
9 {
10 int a[64];
11 #pragma omp parallel
12 {
13 #pragma omp barrier
14 if (omp_get_thread_num () == 0)
15 {
16 #pragma omp cancel parallel
17 }
18 #pragma omp for
19 for (int i = 0; i < 64; i++)
20 a[i] = i;
21 if (omp_get_cancellation ())
22 abort ();
23 }
24 #pragma omp parallel
25 {
26 #pragma omp barrier
27 if (omp_get_thread_num () == 0)
28 {
29 #pragma omp cancel parallel
30 }
31 #pragma omp taskgroup
32 {
33 #pragma omp for
34 for (int i = 0; i < 64; i++)
35 #pragma omp task
36 a[i] += i;
37 if (omp_get_cancellation ())
38 abort ();
39 }
40 }
41 return 0;
42 }