https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104696
--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> --- (In reply to Chung-Lin Tang from comment #3) > The problem, at a low-level, is that the Fortran FE is using always_pointer, > while C/C++ front-ends generate attach_detach (and turns in attach after > gimplify). Actually, if one modifies the C testcase, as alluded in previous comment 2, one runs into the same issue. Namely, for: ------------ test.c-------------- struct s { int d; }; struct s2 { struct s r[5], q, arr[1024][1024]; }; int main () { struct s2 x; #pragma omp target map(tofrom: x.q.d) x.q.d = 2; #pragma omp target map(tofrom: x.r[1].d) *.r[1].d = 3; __builtin_printf("%d, %d\n", x.q.d, x.r[1].d); return 0; } ------------ test.c-------------- The expect result is 'struct: x' + 'tofrom: x.r[1].d' - and as 'struct:x' exists, no implicit mapping of 'x' happens. That happens for 'x.q.d': map(struct:x [len: 1]) map(tofrom:x.q.d [len: 4]) but not for 'x.r[1].d': map(tofrom:x [len: 4194328][implicit]) map(tofrom:x.r[1].d [len: 4]) Thus the code which constructs 'struct: x' has trouble for 'component ref + array ref + component ref'.