1/* PR libgomp/32468 */ 2/* { dg-do compile } */ 3/* { dg-options "-O2 -fopenmp -fdump-tree-ompexp" } */ 4 5extern int printf (const char *, ...); 6extern int omp_get_thread_num (void), omp_get_num_threads (void); 7extern int bar (void); 8extern int baz (const char *, ...); 9 10void 11f1 (void) 12{ 13#pragma omp parallel 14 { 15 baz ("%d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 16 #pragma omp sections 17 { 18 #pragma omp section 19 printf ("section1 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 20 #pragma omp section 21 printf ("section2 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 22 } 23 } 24} 25 26void 27f2 (void) 28{ 29#pragma omp parallel 30 { 31 #pragma omp sections 32 { 33 #pragma omp section 34 printf ("section1 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 35 #pragma omp section 36 printf ("section2 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 37 } 38 baz ("%d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 39 } 40} 41 42void 43f3 (void) 44{ 45#pragma omp parallel 46 { 47 int bb = bar (); 48 #pragma omp sections 49 { 50 #pragma omp section 51 printf ("section1 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 52 #pragma omp section 53 printf ("section2 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 54 } 55 } 56} 57 58void 59f4 (void) 60{ 61 int i; 62#pragma omp parallel 63 { 64 baz ("%d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 65 #pragma omp for schedule (dynamic, 15) 66 for (i = 0; i < 10000; i++) 67 printf ("section1 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 68 } 69} 70 71void 72f5 (void) 73{ 74 int i; 75#pragma omp parallel 76 { 77 #pragma omp for schedule (dynamic, 15) 78 for (i = 0; i < 10000; i++) 79 printf ("section1 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 80 baz ("%d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 81 } 82} 83 84void 85f6 (void) 86{ 87 int i; 88#pragma omp parallel 89 { 90 int bb = bar (); 91 #pragma omp for schedule (runtime) 92 for (i = 0; i < 10000; i++) 93 printf ("section1 %d/%d\n", omp_get_thread_num (), omp_get_num_threads ()); 94 } 95} 96 97/* There should not be a GOMP_parallel_{loop,sections}* call. */ 98/* { dg-final { scan-tree-dump-times "GOMP_parallel_loop" 0 "ompexp"} } */ 99/* { dg-final { scan-tree-dump-times "GOMP_parallel_sections" 0 "ompexp"} } */ 100/* { dg-final { cleanup-tree-dump "ompexp" } } */ 101