]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert "Target mapping C++ members inside member functions"
authorChung-Lin Tang <cltang@codesourcery.com>
Wed, 26 May 2021 11:12:17 +0000 (19:12 +0800)
committerChung-Lin Tang <cltang@codesourcery.com>
Sat, 29 May 2021 20:56:54 +0000 (04:56 +0800)
This reverts commit e6258503835311ae3508ed123cb3b155fc2626ca.

gcc/cp/parser.c
gcc/cp/semantics.c
gcc/testsuite/g++.dg/gomp/target-3.C [deleted file]
gcc/testsuite/g++.dg/gomp/this-2.C

index 901402bccb1077bc540fe12979c07ea4611de485..89f7af18857e85679ee983890c782eaf0dbc5fd9 100644 (file)
@@ -38051,7 +38051,7 @@ cp_parser_omp_clause_map (cp_parser *parser, tree list)
     }
 
   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_MAP, list,
-                                         NULL, C_ORT_OMP, true);
+                                         NULL);
 
   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
     OMP_CLAUSE_SET_MAP_KIND (c, kind);
index 80e486a090d13cef0324801f5afdacd0a51e97eb..536e3bf1655fd33b32d8e72f5a62926ad66fac40 100644 (file)
@@ -4936,9 +4936,6 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
       if (REFERENCE_REF_P (t)
          && TREE_CODE (TREE_OPERAND (t, 0)) == COMPONENT_REF)
        t = TREE_OPERAND (t, 0);
-      if ((ort == C_ORT_ACC || ort == C_ORT_OMP)
-         && TREE_CODE (t) == FIELD_DECL)
-       t = finish_non_static_data_member (t, NULL_TREE, NULL_TREE);
       ret = t;
       if (TREE_CODE (t) == COMPONENT_REF
          && (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
@@ -4964,12 +4961,8 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
                  return error_mark_node;
                }
              t = TREE_OPERAND (t, 0);
-             if ((ort == C_ORT_ACC || ort == C_ORT_OMP)
-                 && TREE_CODE (t) == INDIRECT_REF)
-               {
-                 t = TREE_OPERAND (t, 0);
-                 STRIP_NOPS (t);
-               }
+             if (ort == C_ORT_ACC && TREE_CODE (t) == INDIRECT_REF)
+               t = TREE_OPERAND (t, 0);
            }
          if (REFERENCE_REF_P (t))
            t = TREE_OPERAND (t, 0);
@@ -4989,9 +4982,6 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &types,
          return error_mark_node;
        }
       else if (ort == C_ORT_OMP
-              && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP
-              && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_TO
-              && OMP_CLAUSE_CODE (c) != OMP_CLAUSE_FROM
               && TREE_CODE (t) == PARM_DECL
               && DECL_ARTIFICIAL (t)
               && DECL_NAME (t) == this_identifier)
@@ -7728,11 +7718,6 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
                        t = TREE_OPERAND (t, 0);
                      if (REFERENCE_REF_P (t))
                        t = TREE_OPERAND (t, 0);
-                     if (TREE_CODE (t) == INDIRECT_REF)
-                       {
-                         t = TREE_OPERAND (t, 0);
-                         STRIP_NOPS (t);
-                       }
                      if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
                          && OMP_CLAUSE_MAP_IMPLICIT (c)
                          && (bitmap_bit_p (&map_head, DECL_UID (t))
@@ -7857,14 +7842,6 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
                    goto handle_map_references;
                }
            }
-         if ((ort == C_ORT_ACC || ort == C_ORT_OMP)
-             && !processing_template_decl
-             && TREE_CODE (t) == FIELD_DECL)
-           {
-             OMP_CLAUSE_DECL (c) = finish_non_static_data_member (t, NULL_TREE,
-                                                                  NULL_TREE);
-             break;
-           }
          if (!VAR_P (t) && TREE_CODE (t) != PARM_DECL)
            {
              if (processing_template_decl && TREE_CODE (t) != OVERLOAD)
@@ -7891,9 +7868,7 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
                        omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
              remove = true;
            }
-         else if (ort != C_ORT_ACC
-                  && ort != C_ORT_OMP
-                  && t == current_class_ptr)
+         else if (ort != C_ORT_ACC && t == current_class_ptr)
            {
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%<this%> allowed in OpenMP only in %<declare simd%>"
diff --git a/gcc/testsuite/g++.dg/gomp/target-3.C b/gcc/testsuite/g++.dg/gomp/target-3.C
deleted file mode 100644 (file)
index fe2e38b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// { dg-do compile }
-// { dg-options "-fopenmp -fdump-tree-gimple" }
-
-struct S
-{
-  int a, b;
-  void bar (int);
-};
-
-void
-S::bar (int x)
-{
-  #pragma omp target map (alloc: a, b)
-    ;
-  #pragma omp target enter data map (alloc: a, b)
-}
-
-template <int N>
-struct T
-{
-  int a, b;
-  void bar (int);
-};
-
-template <int N>
-void
-T<N>::bar (int x)
-{
-  #pragma omp target map (alloc: a, b)
-    ;
-  #pragma omp target enter data map (alloc: a, b)
-}
-
-template struct T<0>;
-
-/* { dg-final { scan-tree-dump-times "map\\(alloc:this->b \\\[len: \[0-9\]+\\\]\\) map\\(alloc:this->a \\\[len: \[0-9\]+\\\]\\)" 4 "gimple" } } */
index b521a4faf5e0f456720cef8da83eac550342d69b..d03b8a0728efa2b343b7a8023d95d2d6b848ceaa 100644 (file)
@@ -9,14 +9,14 @@ struct S
 void
 S::bar (int x)
 {
-  #pragma omp target map (this, x)             // { dg-error "cannot take the address of .this., which is an rvalue expression" }
+  #pragma omp target map (this, x)             // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
     ;
-  #pragma omp target map (this[0], x)
+  #pragma omp target map (this[0], x)          // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
     ;
-  #pragma omp target update to (this, x)       // { dg-error "cannot take the address of .this., which is an rvalue expression" }
-  #pragma omp target update to (this[0], x)
-  #pragma omp target update from (this, x)     // { dg-error "cannot take the address of .this., which is an rvalue expression" }
-  #pragma omp target update from (this[1], x)
+  #pragma omp target update to (this, x)       // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
+  #pragma omp target update to (this[0], x)    // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
+  #pragma omp target update from (this, x)     // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
+  #pragma omp target update from (this[1], x)  // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
 }
 
 template <int N>
@@ -29,14 +29,14 @@ template <int N>
 void
 T<N>::bar (int x)
 {
-  #pragma omp target map (this, x)             // { dg-error "cannot take the address of .this., which is an rvalue expression" }
+  #pragma omp target map (this, x)             // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
     ;
-  #pragma omp target map (this[0], x)
+  #pragma omp target map (this[0], x)          // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
     ;
-  #pragma omp target update to (this, x)       // { dg-error "cannot take the address of .this., which is an rvalue expression" }
-  #pragma omp target update to (this[0], x)
-  #pragma omp target update from (this, x)     // { dg-error "cannot take the address of .this., which is an rvalue expression" }
-  #pragma omp target update from (this[1], x)
+  #pragma omp target update to (this, x)       // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
+  #pragma omp target update to (this[0], x)    // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
+  #pragma omp target update from (this, x)     // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
+  #pragma omp target update from (this[1], x)  // { dg-error ".this. allowed in OpenMP only in .declare simd. clauses" }
 }
 
 template struct T<0>;