(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
ordered-4.c
       1  extern
       2  #ifdef __cplusplus
       3  "C"
       4  #endif
       5  void abort (void);
       6  
       7  void
       8  foo (int i, char *j)
       9  {
      10    #pragma omp atomic
      11    j[i]++;
      12    #pragma omp ordered threads
      13    {
      14      int t;
      15      #pragma omp atomic read
      16      t = j[i];
      17      if (t != 3)
      18        abort ();
      19      if (i > 1)
      20        {
      21  	#pragma omp atomic read
      22  	t = j[i - 1];
      23  	if (t == 2)
      24  	  abort ();
      25        }
      26      if (i < 127)
      27        {
      28  	#pragma omp atomic read
      29  	t = j[i + 1];
      30  	if (t == 4)
      31  	  abort ();
      32        }
      33    }
      34    #pragma omp atomic
      35    j[i]++;
      36  }
      37  
      38  int
      39  main ()
      40  {
      41    int i;
      42    char j[128];
      43    #pragma omp parallel
      44    {
      45      #pragma omp for
      46      for (i = 0; i < 128; i++)
      47        j[i] = 0;
      48      #pragma omp for ordered schedule(dynamic, 1)
      49      for (i = 0; i < 128; i++)
      50        {
      51  	#pragma omp atomic
      52  	j[i]++;
      53  	#pragma omp ordered threads
      54  	{
      55  	  int t;
      56  	  #pragma omp atomic read
      57  	  t = j[i];
      58  	  if (t != 1)
      59  	    abort ();
      60  	  if (i > 1)
      61  	    {
      62  	      #pragma omp atomic read
      63  	      t = j[i - 1];
      64  	      if (t == 0)
      65  		abort ();
      66  	    }
      67  	  if (i < 127)
      68  	    {
      69  	      #pragma omp atomic read
      70  	      t = j[i + 1];
      71  	      if (t == 2)
      72  		abort ();
      73  	    }
      74  	}
      75  	#pragma omp atomic
      76  	j[i]++;
      77        }
      78      #pragma omp for ordered schedule(static, 1)
      79      for (i = 0; i < 128; i++)
      80        foo (i, j);
      81    }
      82    return 0;
      83  }