| // RUN: %libomptarget-compile-generic | |
| // | |
| // RUN: env LIBOMPTARGET_TREAT_ATTACH_AUTO_AS_ALWAYS=1 \ | |
| // RUN: env LIBOMPTARGET_DEBUG=1 \ | |
| // RUN: %libomptarget-run-generic 2>&1 \ | |
| // RUN: | %fcheck-generic -check-prefix=DEBUG | |
| // | |
| // RUN: env LIBOMPTARGET_TREAT_ATTACH_AUTO_AS_ALWAYS=1 \ | |
| // RUN: %libomptarget-run-generic 2>&1 \ | |
| // RUN: | %fcheck-generic -check-prefix=CHECK | |
| // | |
| // REQUIRES: debug | |
| // Ensure that under LIBOMPTARGET_TREAT_ATTACH_AUTO_AS_ALWAYS, the pointer | |
| // attachment for map(p[0:0]) happens as if the user had specified the | |
| // attach(always) map-type-modifier. | |
| #include <omp.h> | |
| #include <stdio.h> | |
| int x[10]; | |
| int *p; | |
| void f1() { | |
| #pragma omp target enter data map(to : p) | |
| #pragma omp target enter data map(to : x) | |
| p = &x[0]; | |
| int **p_mappedptr = (int **)omp_get_mapped_ptr(&p, omp_get_default_device()); | |
| int *x0_mappedptr = | |
| (int *)omp_get_mapped_ptr(&x[0], omp_get_default_device()); | |
| int *p0_deviceaddr = NULL; | |
| printf("p_mappedptr %s null\n", p_mappedptr == (int **)NULL ? "==" : "!="); | |
| printf("x0_mappedptr %s null\n", x0_mappedptr == (int *)NULL ? "==" : "!="); | |
| // CHECK: p_mappedptr != null | |
| // CHECK: x0_mappedptr != null | |
| #pragma omp target enter data map(to : p[0 : 0]) // Implies: attach(auto) | |
| // clang-format off | |
| // DEBUG: --> Treating ATTACH(auto) as ATTACH(always) because LIBOMPTARGET_TREAT_ATTACH_AUTO_AS_ALWAYS is true | |
| // clang-format on | |
| #pragma omp target map(present, alloc : p) map(from : p0_deviceaddr) | |
| { | |
| p0_deviceaddr = &p[0]; | |
| } | |
| printf("p0_deviceaddr %s x0_mappedptr\n", | |
| p0_deviceaddr == x0_mappedptr ? "==" : "!="); | |
| // CHECK: p0_deviceaddr == x0_mappedptr | |
| #pragma omp target exit data map(delete : x, p) | |
| } | |
| int main() { f1(); } |