(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
critical-2.c
       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  
      10  int 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  }