(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
pr80809-3.c
       1  /* PR middle-end/80809 */
       2  /* { dg-do run } */
       3  
       4  __attribute__((noinline, noclone)) void
       5  foo (int x)
       6  {
       7    int i, v[x], w[16];
       8    for (i = 0; i < x; i++)
       9      v[i] = i;
      10    for (i = 0; i < 16; i++)
      11      w[i] = 0;
      12  #pragma omp parallel
      13  #pragma omp single
      14    {
      15      int z[x];
      16      for (i = 0; i < x; i++)
      17        z[0] = 0;
      18      for (i = 0; i < 16; i++)
      19  #pragma omp task firstprivate (z) firstprivate (v)
      20        {
      21  	int j;
      22  	for (j = 0; j < x; j++)
      23  	  z[j] = i;
      24  	for (j = 0; j < x; j++)
      25  	  v[j] += z[j];
      26  	for (j = 0; j < x; j++)
      27  	  w[i] += v[j];
      28        }
      29    }
      30    for (i = 0; i < 16; i++)
      31      if (w[i] != (x - 1) * x / 2 + x * i)
      32        __builtin_abort ();
      33  }
      34  
      35  int
      36  main ()
      37  {
      38    foo (4);
      39    foo (27);
      40    foo (196);
      41    return 0;
      42  }