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