// RUN: %libomptarget-compile-run-and-check-generic

// UNSUPPORTED: intelgpu

#include <cstdio>
#include <cstdlib>

#define NUM 1024

class C {
public:
  int *a;
};

#pragma omp declare mapper(id : C s) map(alloc : s.a) 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;
}
