145
|
1 /* { dg-do run } */
|
|
2 /* { dg-set-target-env-var OMP_CANCELLATION "true" } */
|
|
3
|
|
4 #include <stdlib.h>
|
|
5 #include <unistd.h>
|
|
6 #include <omp.h>
|
|
7
|
|
8 int
|
|
9 main ()
|
|
10 {
|
|
11 int i;
|
|
12 #pragma omp parallel
|
|
13 {
|
|
14 int c = 0;
|
|
15 #pragma omp barrier
|
|
16 #pragma omp master taskloop num_tasks (25) firstprivate (c)
|
|
17 for (i = 0; i < 50; i++)
|
|
18 {
|
|
19 if (c && omp_get_cancellation ())
|
|
20 abort ();
|
|
21 #pragma omp cancellation point taskgroup
|
|
22 usleep (30);
|
|
23 if (i > 10)
|
|
24 c = 1;
|
|
25 #pragma omp cancel taskgroup if (i > 10)
|
|
26 if (i > 10 && omp_get_cancellation ())
|
|
27 abort ();
|
|
28 }
|
|
29 usleep (10);
|
|
30 }
|
|
31 return 0;
|
|
32 }
|