Previous patch:
https://gcc.gnu.org/pipermail/gcc-patches/2021-February/564976.html

was reverted by Catherine when I was away, due to regressions in mapping
array members. The fix appears to be a re-placement of 
finish_non_static_data_member()
inside handle_omp_array_sections().

Tested and committed to devel/omp/gcc-10, the above patch was also re-committed 
as well.

Chung-Lin
From da047f63c601118ad875d13929453094acc6c6c9 Mon Sep 17 00:00:00 2001
From: Chung-Lin Tang <clt...@codesourcery.com>
Date: Fri, 26 Feb 2021 20:13:29 +0800
Subject: [PATCH] Fix regression of array members in OpenMP map clauses.

Fixed a regression of array members not working in OpenMP map clauses after
commit bf8605f14ec33ea31233a3567f3184fee667b695.

This patch itself probably should be considered a fix for commit aadfc9843.

2021-02-26  Chung-Lin Tang  <clt...@codesourcery.com>

gcc/cp/ChangeLog:

        * semantics.c (handle_omp_array_sections): Adjust position of making
        COMPONENT_REF from FIELD_DECL to earlier position.
---
 gcc/cp/semantics.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 370d5831091..55a5983528e 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5386,6 +5386,8 @@ handle_omp_array_sections (tree c, enum c_omp_region_type 
ort)
            }
          OMP_CLAUSE_DECL (c) = first;
          OMP_CLAUSE_SIZE (c) = size;
+         if (TREE_CODE (t) == FIELD_DECL)
+           t = finish_non_static_data_member (t, NULL_TREE, NULL_TREE);
          if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP
              || (TREE_CODE (t) == COMPONENT_REF
                  && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE))
@@ -5414,8 +5416,6 @@ handle_omp_array_sections (tree c, enum c_omp_region_type 
ort)
              }
          tree c2 = build_omp_clause (OMP_CLAUSE_LOCATION (c),
                                      OMP_CLAUSE_MAP);
-         if (TREE_CODE (t) == FIELD_DECL)
-           t = finish_non_static_data_member (t, NULL_TREE, NULL_TREE);
          if ((ort & C_ORT_OMP_DECLARE_SIMD) != C_ORT_OMP && ort != C_ORT_ACC)
            OMP_CLAUSE_SET_MAP_KIND (c2, GOMP_MAP_POINTER);
          else if (TREE_CODE (t) == COMPONENT_REF)
-- 
2.17.1

Reply via email to