1*404b540aSrobert // { dg-do run } 2*404b540aSrobert // Test several constructs within a parallel. At one point in development, 3*404b540aSrobert // the critical directive clobbered the shared clause of the parallel. 4*404b540aSrobert 5*404b540aSrobert #include <omp.h> 6*404b540aSrobert #include <stdlib.h> 7*404b540aSrobert 8*404b540aSrobert #define N 2000 9*404b540aSrobert main()10*404b540aSrobertint main() 11*404b540aSrobert { 12*404b540aSrobert int A[N]; 13*404b540aSrobert int nthreads; 14*404b540aSrobert int i; 15*404b540aSrobert 16*404b540aSrobert #pragma omp parallel shared (A, nthreads) 17*404b540aSrobert { 18*404b540aSrobert #pragma omp master 19*404b540aSrobert nthreads = omp_get_num_threads (); 20*404b540aSrobert 21*404b540aSrobert #pragma omp for 22*404b540aSrobert for (i = 0; i < N; i++) 23*404b540aSrobert A[i] = 0; 24*404b540aSrobert 25*404b540aSrobert #pragma omp critical 26*404b540aSrobert for (i = 0; i < N; i++) 27*404b540aSrobert A[i] += 1; 28*404b540aSrobert } 29*404b540aSrobert 30*404b540aSrobert for (i = 0; i < N; i++) 31*404b540aSrobert if (A[i] != nthreads) 32*404b540aSrobert abort (); 33*404b540aSrobert 34*404b540aSrobert return 0; 35*404b540aSrobert } 36