| // RUN: %libomptarget-compile-generic && env LIBOMPTARGET_DEBUG=1 %libomptarget-run-generic 2>&1 | %fcheck-generic |
| // REQUIRES: libomptarget-debug |
| |
| #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; |
| } |
| |