1 /* { dg-do run } */ 2 3 #include <stdio.h> 4 5 void work(int n)6work (int n) 7 { 8 printf ("[%d of %d], nested = %d, n = %d\n", omp_get_thread_num (), omp_get_num_threads(), omp_get_nested (), n); 9 } 10 11 void sub3(int n)12sub3 (int n) 13 { 14 work (n); 15 #pragma omp barrier 16 work (n); 17 } 18 19 void sub2(int k)20sub2 (int k) 21 { 22 #pragma omp parallel shared(k) 23 sub3 (k); 24 } 25 26 void sub1(int n)27sub1 (int n) 28 { 29 int i; 30 #pragma omp parallel private(i) shared(n) 31 { 32 #pragma omp for 33 for (i = 0; i < n; i++) 34 sub2 (i); 35 } 36 } 37 int main()38main () 39 { 40 sub1 (2); 41 sub2 (15); 42 sub3 (20); 43 return 0; 44 } 45