// RUN: %libomptarget-compile-run-and-check-aarch64-unknown-linux-gnu
// RUN: %libomptarget-compile-run-and-check-powerpc64-ibm-linux-gnu
// RUN: %libomptarget-compile-run-and-check-powerpc64le-ibm-linux-gnu
// RUN: %libomptarget-compile-run-and-check-x86_64-pc-linux-gnu
// RUN: %libomptarget-compile-run-and-check-nvptx64-nvidia-cuda

#include <cstdio>
#include <cstdlib>

#define NUM 1024

class C {
public:
  int *a;
};

#pragma omp declare mapper(id: C s) map(s.a[0:NUM])

int main() {
  C c;
  int sum = 0;
  c.a = (int*) malloc(sizeof(int)*NUM);
  for (int i = 0; i < NUM; i++) {
    c.a[i] = 1;
  }
  #pragma omp target enter data map(mapper(id),alloc: c)
  #pragma omp target teams distribute parallel for
  for (int i = 0; i < NUM; i++) {
    c.a[i] = 0;
  }
  #pragma omp target update from(mapper(id): c)
  for (int i = 0; i < NUM; i++) {
    sum += c.a[i];
  }
  // CHECK: Sum (after first update from) = 0
  printf("Sum (after first update from) = %d\n", sum);
  for (int i = 0; i < NUM; i++) {
    c.a[i] = 1;
  }
  #pragma omp target update to(mapper(id): c)
  #pragma omp target teams distribute parallel for
  for (int i = 0; i < NUM; i++) {
    ++c.a[i];
  }
  sum = 0;
  for (int i = 0; i < NUM; i++) {
    sum += c.a[i];
  }
  // CHECK: Sum (after update to) = 1024
  printf("Sum (after update to) = %d\n", sum);
  #pragma omp target update from(mapper(id): c)
  sum = 0;
  for (int i = 0; i < NUM; i++) {
    sum += c.a[i];
  }
  // CHECK: Sum (after second update from) = 2048
  printf("Sum (after second update from) = %d\n", sum);
  #pragma omp target exit data map(mapper(id),delete: c)
  return 0;
}

