1 // RUN: %libomptarget-compilexx-run-and-check-generic 2 3 #include <omp.h> 4 5 #include <cassert> 6 #include <iostream> 7 8 int main(int argc, char *argv[]) { 9 #pragma omp parallel for 10 for (int i = 0; i < 16; ++i) { 11 for (int n = 1; n < (1 << 13); n <<= 1) { 12 void *p = omp_target_alloc(n * sizeof(int), 0); 13 omp_target_free(p, 0); 14 } 15 } 16 17 #pragma omp parallel for 18 for (int i = 0; i < 16; ++i) { 19 for (int n = 1; n < (1 << 13); n <<= 1) { 20 int *p = (int *)omp_target_alloc(n * sizeof(int), 0); 21 #pragma omp target teams distribute parallel for is_device_ptr(p) 22 for (int j = 0; j < n; ++j) { 23 p[j] = i; 24 } 25 int buffer[n]; 26 #pragma omp target teams distribute parallel for is_device_ptr(p) \ 27 map(from \ 28 : buffer) 29 for (int j = 0; j < n; ++j) { 30 buffer[j] = p[j]; 31 } 32 for (int j = 0; j < n; ++j) { 33 assert(buffer[j] == i); 34 } 35 omp_target_free(p, 0); 36 } 37 } 38 39 std::cout << "PASS\n"; 40 return 0; 41 } 42 43 // CHECK: PASS 44