Hi, This patch series reworks how indirect struct (or class or derived-type) component mappings are lowered for OpenMP and OpenACC. I previously posted this against the og10 branch:
https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570058.html This version of the series, rebased to trunk, incorporates parts of some of Chung-Lin's patches from the og10 branch. The new "member-array-acc.C" and "member-array-omp.C" tests also depend on a couple of his other patches from the og10 branch that have not landed upstream yet: "Target mapping C++ members inside member functions" "Fix regression of array members in OpenMP map clauses." The tests in question have been XFAILed for now. Tested with offloading to NVPTX (as a series). Further comments on individual patches. Thanks, Julian Julian Brown (5): Unify ARRAY_REF/INDIRECT_REF stripping code in extract_base_bit_offset Refactor struct lowering for OpenMP/OpenACC in gimplify.c Rewrite GOMP_MAP_ATTACH_DETACH mappings for OpenMP also Rework indirect struct handling for OpenACC/OpenMP in gimplify.c Mapping of components of references to pointers to structs for OpenMP/OpenACC gcc/cp/semantics.c | 7 +- gcc/fortran/trans-openmp.c | 20 +- gcc/gimplify.c | 1042 +++++++++++------ gcc/omp-low.c | 16 +- gcc/testsuite/g++.dg/goacc/member-array-acc.C | 14 + gcc/testsuite/g++.dg/gomp/member-array-omp.C | 14 + .../testsuite/libgomp.oacc-c++/deep-copy-17.C | 101 ++ .../libgomp.oacc-c-c++-common/deep-copy-15.c | 71 ++ .../libgomp.oacc-c-c++-common/deep-copy-16.c | 231 ++++ 9 files changed, 1111 insertions(+), 405 deletions(-) create mode 100644 gcc/testsuite/g++.dg/goacc/member-array-acc.C create mode 100644 gcc/testsuite/g++.dg/gomp/member-array-omp.C create mode 100644 libgomp/testsuite/libgomp.oacc-c++/deep-copy-17.C create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-15.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-16.c -- 2.29.2