// { dg-do compile { target c++11 } }

void
foo ()
{
  int a[10] = {};
  #pragma omp parallel sections
  {
    #pragma omp section
    a[0]++;
    [[omp::directive (section)]] {
    a[1]++;
    } [[omp::directive (section)]]
    a[2]++;
    #pragma omp section
    { a[3]++; }
  }
  [[omp::directive (parallel sections)]]
  {
    #pragma omp section
    a[0]++;
    [[omp::directive (section)]] {
    a[1]++;
    } [[omp::directive (section)]]
    a[2]++;
    #pragma omp section
    { a[3]++; }
  }
  #pragma omp parallel sections
  {
    #pragma omp section
    a[0]++;
    a[4]++;
    l1: a[5]++;
    if (a[5] == 42) goto l1;
    [[omp::directive (section)]] {
    a[1]++;
    a[6]++;
    } [[omp::directive (section)]]
    a[2]++;
    a[7]++;
    #pragma omp section
    { a[3]++; }
    a[8]++;
  }
  [[omp::directive (parallel sections)]]
  {
    #pragma omp section
    a[0]++;
    a[4]++;
    [[omp::directive (section)]] {
    a[1]++;
    a[5]++;
    } [[omp::directive (section)]]
    a[2]++;
    l2: a[6]++;
    if (a[6] == 42)
      goto l2;
    a[7]++;
    #pragma omp section
    a[8]++;
    { a[3]++; }
  }
}

int
bar (int a, int *c, int *d, int *e, int *f)
{
  int i;
  #pragma omp simd reduction (inscan, +: a)
  for (i = 0; i < 64; i++)
    {
      d[i] = a;
      [[omp::directive (scan, exclusive (a))]]
      a += c[i];
    }
  [[omp::directive (simd reduction (inscan, +: a))]]
  for (i = 0; i < 64; i++)
    {
      a += c[i];
      #pragma omp scan inclusive (a)
      d[i] = a;
    }
  #pragma omp simd reduction (inscan, +: a)
  for (i = 0; i < 64; i++)
    {
      int t = a;
      d[i] = t;
      [[omp::directive (scan, exclusive (a))]]
      int u = c[i];
      a += u;
    }
  [[omp::directive (simd reduction (inscan, +: a))]]
  for (i = 0; i < 64; i++)
    {
      int t = c[i];
      a += t;
      #pragma omp scan inclusive (a)
      int u = a;
      d[i] = u;
    }
  return a;
}
