1// { dg-do run } 2// { dg-set-target-env-var OMP_CANCELLATION "true" } 3 4#include <unistd.h> 5#include <omp.h> 6#include "cancel-test.h" 7 8void 9foo () 10{ 11 S a, b, c, d, e, f; 12 #pragma omp parallel private (c, d) firstprivate (e, f) 13 #pragma omp taskgroup 14 { 15 c.bump (); 16 e.bump (); 17 #pragma omp task firstprivate (b, f) private (d) 18 { 19 S h; 20 b.bump (); 21 d.bump (); 22 f.bump (); 23 #pragma omp cancel taskgroup 24 if (omp_get_cancellation ()) 25 abort (); 26 } 27 } 28 #pragma omp parallel private (c, d) firstprivate (e, f) 29 { 30 #pragma omp barrier 31 #pragma omp single 32 #pragma omp taskgroup 33 { 34 int i; 35 c.bump (); 36 e.bump (); 37 for (i = 0; i < 50; i++) 38 #pragma omp task firstprivate (b, f) private (d) 39 { 40 S h; 41 b.bump (); 42 d.bump (); 43 f.bump (); 44 #pragma omp cancellation point taskgroup 45 usleep (30); 46 #pragma omp cancel taskgroup if (i > 5) 47 } 48 } 49 usleep (10); 50 } 51} 52 53int 54main () 55{ 56 foo (); 57 S::verify (); 58} 59