struct-elem-1.c 646 B

1234567891011121314151617181920212223242526272829
  1. #include <omp.h>
  2. #include <stdlib.h>
  3. struct S
  4. {
  5. int a, b;
  6. };
  7. typedef struct S S;
  8. int main (void)
  9. {
  10. int d = omp_get_default_device ();
  11. int id = omp_get_initial_device ();
  12. if (d < 0 || d >= omp_get_num_devices ())
  13. d = id;
  14. S s;
  15. #pragma omp target enter data map (alloc: s.a, s.b)
  16. #pragma omp target exit data map (release: s.b)
  17. /* OpenMP 5.0 structure element mapping rules describe that elements of same
  18. structure variable should allocate/deallocate in a uniform fashion, so
  19. "s.a" should be removed together by above 'exit data'. */
  20. if (d != id && omp_target_is_present (&s.a, d))
  21. abort ();
  22. return 0;
  23. }