| // clang-format off | |
| // RUN: %libomptarget-compile-generic && env LIBOMPTARGET_DEBUG=1 %libomptarget-run-generic 2>&1 | %fcheck-generic | |
| // REQUIRES: libomptarget-debug | |
| // clang-format on | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| int *allocate(size_t n) { | |
| int *ptr = malloc(sizeof(int) * n); | |
| #pragma omp target enter data map(to : ptr[ : n]) | |
| return ptr; | |
| } | |
| void deallocate(int *ptr, size_t n) { | |
| #pragma omp target exit data map(delete : ptr[ : n]) | |
| free(ptr); | |
| } | |
| #pragma omp declare target | |
| int *cnt; | |
| void foo() { ++(*cnt); } | |
| #pragma omp end declare target | |
| int main(void) { | |
| int *A = allocate(10); | |
| int *V = allocate(10); | |
| deallocate(A, 10); | |
| deallocate(V, 10); | |
| // CHECK-NOT: RefCount=2 | |
| cnt = malloc(sizeof(int)); | |
| *cnt = 0; | |
| #pragma omp target map(cnt[ : 1]) | |
| foo(); | |
| printf("Cnt = %d.\n", *cnt); | |
| // CHECK: Cnt = 1. | |
| *cnt = 0; | |
| #pragma omp target data map(cnt[ : 1]) | |
| #pragma omp target | |
| foo(); | |
| printf("Cnt = %d.\n", *cnt); | |
| // CHECK: Cnt = 1. | |
| free(cnt); | |
| return 0; | |
| } |