// Both parallel regions have to be nested for this to reproduce, and only at
// -O2 and above; either one alone is correct at every optimization level.

// RUN: %libomptarget-compileopt-generic
// RUN: %libomptarget-run-generic | %fcheck-generic

// REQUIRES: gpu
// XFAIL: intelgpu

#include <stdio.h>

#define N 5

int main(void) {
  long aa = 0;
  int ng = 6, cmom = 4, nxyz = 5;

#pragma omp target teams distribute num_teams(nxyz) thread_limit(4)            \
    map(tofrom : aa)
  for (int gid = 0; gid < nxyz; gid++) {
#pragma omp parallel for collapse(2)
    for (unsigned g = 0; g < ng; g++)
      for (unsigned l = 0; l < cmom - 1; l++) {
        int a = 0;
        for (int ii = 0; ii < N + 2; ii++) {
#pragma omp parallel for reduction(+ : a)
          for (int i = 0; i < N; i++)
            a += i;
        }
#pragma omp atomic
        aa += a;
      }
  }

  long expected = (long)ng * (cmom - 1) * nxyz * (N * (N - 1) / 2) * (N + 2);
  printf("aa = %ld, expected %ld\n", aa, expected);
  return aa != expected;
}

// CHECK: aa = 6300, expected 6300
