(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
lastprivate-conditional-3.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target tls_runtime } */
       3  /* { dg-additional-options "-std=gnu99" {target c } } */
       4  
       5  #include <omp.h>
       6  #include <stdlib.h>
       7  
       8  int r, s, u, v, t;
       9  int *x;
      10  
      11  void
      12  foo (int *a)
      13  {
      14    int i;
      15    long long j;
      16    #pragma omp for lastprivate (conditional: u, x) ordered
      17    for (i = 15; i < 64; i++)
      18      {
      19        #pragma omp critical
      20        {
      21  	if ((a[i] % 5) == 3)
      22  	  u = i;
      23        }
      24        #pragma omp ordered
      25        {
      26  	if ((a[i] % 7) == 2)
      27  	  x = &a[i];
      28        }
      29      }
      30    #pragma omp for lastprivate (conditional: v) reduction (+:r, s) schedule (nonmonotonic: static) reduction (task, +: t)
      31    for (i = -3; i < 119; i += 2)
      32      {
      33        ++s;
      34        #pragma omp taskgroup
      35        {
      36  	#pragma omp task in_reduction (+: t)
      37  	  ++t;
      38  	if ((a[i + 4] % 11) == 9)
      39  	  v = i;
      40  	else
      41  	  ++r;
      42        }
      43      }
      44  }
      45  
      46  int
      47  main ()
      48  {
      49    int a[128], i;
      50    for (i = 0; i < 128; i++)
      51      a[i] = i;
      52    #pragma omp parallel
      53    foo (a);
      54    if (u != 63 || v != 115 || x != &a[58] || r != 55 || s != 61 || t != 61)
      55      abort ();
      56    return 0;
      57  }