| struct T { int a; int *b; }; | 
 | struct S { int *s; char u; struct T v; long x; }; | 
 |  | 
 | void bar (int *); | 
 | #pragma omp declare target to (bar) | 
 | void baz (int *); | 
 | #pragma omp declare target enter (baz) | 
 |  | 
 | int | 
 | main () | 
 | { | 
 |   int a[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; | 
 |   struct S s = { a, 5, { 6, a + 5 }, 99L }; | 
 |   #pragma omp target map (s.v.a, s.u, s.x) | 
 |   ; | 
 |   #pragma omp target map (s.v.a, s.u, s.x) | 
 |   bar (&s.v.a); | 
 |   #pragma omp target map (s.v.a) map (always, to: s.u) map (s.x) | 
 |   ; | 
 |   #pragma omp target map (s.s[0]) map (s.v.b[:3]) | 
 |   ; | 
 |   #pragma omp target map (s.s[0]) map (s.v.b[:3]) | 
 |   baz (s.s); | 
 |   return 0; | 
 | } |