/* { dg-do run } */ /* { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } } */ #pragma omp requires reverse_offload int main () { int A[10]; int y; for (int i = 0; i < 10; i++) A[i] = 2*i; y = 42; /* Pointlessly copy to the default device. */ #pragma omp target data map(to: A) { /* Not enclosed in a target region (= i.e. running on the host); the following is valid - it runs on the current device (= host). */ #pragma omp target device ( ancestor:1 ) firstprivate(y) map(to: A) { if (y != 42) __builtin_abort (); for (int i = 0; i < 10; i++) if (A[i] != 2*i) __builtin_abort (); for (int i = 0; i < 10; i++) if (A[i] != 2*i) A[i] = 4*i; y = 31; } if (y != 42) __builtin_abort (); for (int i = 0; i < 10; i++) if (A[i] != 2*i) __builtin_abort (); } if (y != 42) __builtin_abort (); for (int i = 0; i < 10; i++) if (A[i] != 2*i) __builtin_abort (); return 0; }