1/* { dg-do run } */ 2/* { dg-set-target-env-var OMP_CANCELLATION "true" } */ 3 4#include <omp.h> 5#include <unistd.h> 6 7static inline void 8do_some_work (void) 9{ 10 asm volatile ("" : : : "memory"); 11} 12 13int 14main () 15{ 16 omp_set_dynamic (0); 17 omp_set_schedule (omp_sched_static, 1); 18 #pragma omp parallel num_threads (16) 19 { 20 int i, j; 21 do_some_work (); 22 #pragma omp barrier 23 if (omp_get_thread_num () == 1) 24 { 25 sleep (2); 26 #pragma omp cancellation point parallel 27 } 28 for (j = 3; j <= 16; j++) 29 #pragma omp for schedule (runtime) nowait 30 for (i = 0; i < j; i++) 31 do_some_work (); 32 if (omp_get_thread_num () == 0) 33 { 34 sleep (1); 35 #pragma omp cancel parallel 36 } 37 } 38 return 0; 39} 40