1234567891011121314151617181920212223242526272829 |
- #include <omp.h>
- #include <stdlib.h>
- struct S
- {
- int a, b;
- };
- typedef struct S S;
- 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;
- S s;
- #pragma omp target enter data map (alloc: s.a, s.b)
- #pragma omp target exit data map (release: s.b)
- /* OpenMP 5.0 structure element mapping rules describe that elements of same
- structure variable should allocate/deallocate in a uniform fashion, so
- "s.a" should be removed together by above 'exit data'. */
- if (d != id && omp_target_is_present (&s.a, d))
- abort ();
- return 0;
- }
|