// RUN: %libomptarget-compile-generic
// RUN: env LIBOMPTARGET_DEBUG=1 %libomptarget-run-generic 2>&1 \
// RUN: | %fcheck-generic -check-prefix=DEBUG -check-prefix=CHECK
// REQUIRES: libomptarget-debug

#include <stdio.h>

// Even if the "alloc" and "from" are encountered before the "to",
// there should be a data-transfer from host to device, as the
// ref-count goes from 0 to 1 at the entry of the target region.

int main() {
  int x = 111;
  // clang-format off
  // DEBUG: omptarget --> HstPtrBegin 0x[[#%x,HOST_ADDR:]] was newly allocated for the current region
  // DEBUG: omptarget --> Moving {{.*}} bytes (hst:0x{{0*}}[[#HOST_ADDR]]) -> (tgt:0x{{.*}})
  // clang-format on
#pragma omp target map(alloc : x) map(from : x) map(to : x) map(alloc : x)
  {
    x = x + 111;
  }

  printf("After tgt: %d\n", x); // CHECK: After tgt: 222
}
