#include #include int main (void) { int d = omp_get_default_device (); int id = omp_get_initial_device (); if (d < 0 || d >= omp_get_num_devices ()) d = id; unsigned int a = 0xcdcdcdcd; #pragma omp target enter data map (to:a) a = 0xabababab; unsigned char *p = (unsigned char *) &a; unsigned char *q = p + 2; #pragma omp target enter data map (alloc:p[:1], q[:1]) if (d != id) { if (!omp_target_is_present (&a, d)) abort (); if (!omp_target_is_present (&p[0], d)) abort (); if (!omp_target_is_present (&q[0], d)) abort (); } #pragma omp target exit data map (release:a) if (d != id) { if (!omp_target_is_present (&a, d)) abort (); if (!omp_target_is_present (&p[0], d)) abort (); if (!omp_target_is_present (&q[0], d)) abort (); } #pragma omp target exit data map (from:q[:1]) if (d != id) { if (omp_target_is_present (&a, d)) abort (); if (omp_target_is_present (&p[0], d)) abort (); if (omp_target_is_present (&q[0], d)) abort (); if (q[0] != 0xcd) abort (); if (p[0] != 0xab) abort (); } return 0; }