1*404b540aSrobert /* { dg-do run } */ 2*404b540aSrobert 3*404b540aSrobert #include <omp.h> 4*404b540aSrobert #include <stdlib.h> 5*404b540aSrobert 6*404b540aSrobert int main(void)7*404b540aSrobertmain (void) 8*404b540aSrobert { 9*404b540aSrobert int a = 1, b = 2, c = 3; 10*404b540aSrobert void 11*404b540aSrobert foo (void) 12*404b540aSrobert { 13*404b540aSrobert int l = 0; 14*404b540aSrobert #pragma omp parallel shared (a) private (b) firstprivate (c) \ 15*404b540aSrobert num_threads (2) reduction (||:l) 16*404b540aSrobert { 17*404b540aSrobert if (a != 1 || c != 3) l = 1; 18*404b540aSrobert #pragma omp barrier 19*404b540aSrobert if (omp_get_thread_num () == 0) 20*404b540aSrobert { 21*404b540aSrobert a = 4; 22*404b540aSrobert b = 5; 23*404b540aSrobert c = 6; 24*404b540aSrobert } 25*404b540aSrobert #pragma omp barrier 26*404b540aSrobert if (omp_get_thread_num () == 1) 27*404b540aSrobert { 28*404b540aSrobert if (a != 4 || c != 3) l = 1; 29*404b540aSrobert a = 7; 30*404b540aSrobert b = 8; 31*404b540aSrobert c = 9; 32*404b540aSrobert } 33*404b540aSrobert else if (omp_get_num_threads () == 1) 34*404b540aSrobert a = 7; 35*404b540aSrobert #pragma omp barrier 36*404b540aSrobert if (omp_get_thread_num () == 0) 37*404b540aSrobert if (a != 7 || b != 5 || c != 6) l = 1; 38*404b540aSrobert #pragma omp barrier 39*404b540aSrobert if (omp_get_thread_num () == 1) 40*404b540aSrobert if (a != 7 || b != 8 || c != 9) l = 1; 41*404b540aSrobert } 42*404b540aSrobert if (l) 43*404b540aSrobert abort (); 44*404b540aSrobert } 45*404b540aSrobert foo (); 46*404b540aSrobert if (a != 7) 47*404b540aSrobert abort (); 48*404b540aSrobert return 0; 49*404b540aSrobert } 50