1  extern void abort (void);
       2  
       3  int
       4  foo (void)
       5  {
       6    int i = -1, j = -1, k;
       7    void nested (void) { i++; j++; }
       8    nested ();
       9    #pragma omp taskgroup task_reduction (+: i)
      10    {
      11      #pragma omp task in_reduction (+: i)
      12      i++;
      13      #pragma omp task in_reduction (+: i)
      14      i += 6;
      15    }
      16    #pragma omp taskloop reduction (+: j)
      17    for (k = 0; k < 2; k++)
      18      {
      19        j += 5;
      20        #pragma omp task in_reduction (+: j)
      21        j += 31;
      22      }
      23    return i + j;
      24  }
      25  
      26  int
      27  bar (void)
      28  {
      29    int i = 0, j = 0;
      30    void nested (void)
      31    {
      32      int k;
      33      #pragma omp taskgroup task_reduction (+: i)
      34      {
      35        #pragma omp task in_reduction (+: i)
      36        i++;
      37        #pragma omp task in_reduction (+: i)
      38        i += 7;
      39      }
      40      #pragma omp taskloop reduction (+: j)
      41      for (k = 0; k < 2; k++)
      42        {
      43  	j += 21;
      44  	#pragma omp task in_reduction (+: j)
      45  	j += 8;
      46        }
      47    }
      48    nested ();
      49    return i + j;
      50  }
      51  
      52  int
      53  main ()
      54  {
      55    if (foo () != (1 + 6 + (5 + 31) * 2))
      56      abort ();
      57    if (bar () != (1 + 7 + (21 + 8) * 2))
      58      abort ();
      59    return 0;
      60  }