(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
taskloop-1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O2" } */
       3  /* { dg-additional-options "-std=c99" { target c } } */
       4  
       5  int q, r, e;
       6  
       7  __attribute__((noinline, noclone)) void
       8  foo (long a, long b)
       9  {
      10    #pragma omp taskloop lastprivate (q) nogroup
      11      for (long d = a; d < b; d += 2)
      12        {
      13  	q = d;
      14  	if (d < 2 || d > 6 || (d & 1))
      15  	  #pragma omp atomic
      16  	    e |= 1;
      17        }
      18  }
      19  
      20  __attribute__((noinline, noclone)) int
      21  bar (int a, int b)
      22  {
      23    int q = 7;
      24    #pragma omp taskloop lastprivate (q)
      25      for (int d = a; d < b; d++)
      26        {
      27  	if (d < 12 || d > 17)
      28  	  #pragma omp atomic
      29  	    e |= 1;
      30  	q = d;
      31        }
      32    return q;
      33  }
      34  
      35  int
      36  main ()
      37  {
      38    #pragma omp parallel
      39      #pragma omp single
      40        {
      41  	foo (2, 7);
      42  	r = bar (12, 18);
      43        }
      44    if (q != 6 || r != 17 || e)
      45      __builtin_abort ();
      46    return 0;
      47  }