| // RUN: %libomptarget-compile-run-and-check-generic |
| |
| // REQUIRES: libc |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| #pragma omp declare target to(malloc) |
| #pragma omp declare target to(free) |
| |
| int main() { |
| unsigned h_x; |
| unsigned *d_x; |
| #pragma omp target map(from : d_x) |
| { |
| d_x = (unsigned *)malloc(sizeof(unsigned)); |
| *d_x = 1; |
| } |
| |
| #pragma omp target is_device_ptr(d_x) map(from : h_x) |
| { h_x = *d_x; } |
| |
| #pragma omp target is_device_ptr(d_x) |
| { free(d_x); } |
| |
| #pragma omp target teams num_teams(64) |
| #pragma omp parallel num_threads(32) |
| { |
| int *ptr = (int *)malloc(sizeof(int)); |
| *ptr = 42; |
| free(ptr); |
| } |
| |
| // CHECK: PASS |
| if (h_x == 1) |
| fputs("PASS\n", stdout); |
| } |