// RUN: %libomptarget-compile-generic
// RUN: %libomptarget-run-generic 2>&1 \
// RUN: | %fcheck-generic
// XFAIL: intelgpu

#include <stdio.h>
#include <stdlib.h>

#define N 1024
#define FROM 64
#define LENGTH 128

int main() {
  float *A = (float *)malloc(N * sizeof(float));
  float *B = (float *)malloc(N * sizeof(float));
  float *C = (float *)malloc(N * sizeof(float));

  for (int i = 0; i < N; i++) {
    C[i] = 0.0;
  }

  for (int i = 0; i < N; i++) {
    A[i] = i;
    B[i] = 2 * i;
  }

#pragma omp target enter data map(to : A[FROM : LENGTH], B[FROM : LENGTH])
#pragma omp target enter data map(alloc : C[FROM : LENGTH])

// A, B and C have been mapped starting at index FROM, but inside the kernel
// they are captured implicitly so the library must look them up using their
// base address.
#pragma omp target
  {
    for (int i = FROM; i < FROM + LENGTH; i++) {
      C[i] = A[i] + B[i];
    }
  }

#pragma omp target exit data map(from : C[FROM : LENGTH])
#pragma omp target exit data map(delete : A[FROM : LENGTH], B[FROM : LENGTH])

  int errors = 0;
  for (int i = FROM; i < FROM + LENGTH; i++)
    if (C[i] != A[i] + B[i])
      ++errors;

  // CHECK: Success
  if (errors)
    fprintf(stderr, "Failure\n");
  else
    fprintf(stderr, "Success\n");

  free(A);
  free(B);
  free(C);

  return 0;
}
