From: Chung-Lin Tang Date: Wed, 26 May 2021 11:12:17 +0000 (+0800) Subject: Revert "Target mapping C++ members inside member functions" X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c86171a265a2f501213eef027ecb7b93ac1b742f;p=thirdparty%2Fgcc.git Revert "Target mapping C++ members inside member functions" This reverts commit e6258503835311ae3508ed123cb3b155fc2626ca. --- diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 901402bccb10..89f7af18857e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 80e486a090d1..536e3bf1655f 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4936,9 +4936,6 @@ handle_omp_array_sections_1 (tree c, tree t, vec &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 &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 &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), "% allowed in OpenMP only in %" diff --git a/gcc/testsuite/g++.dg/gomp/target-3.C b/gcc/testsuite/g++.dg/gomp/target-3.C deleted file mode 100644 index fe2e38b46a36..000000000000 --- a/gcc/testsuite/g++.dg/gomp/target-3.C +++ /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 -struct T -{ - int a, b; - void bar (int); -}; - -template -void -T::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" } } */ diff --git a/gcc/testsuite/g++.dg/gomp/this-2.C b/gcc/testsuite/g++.dg/gomp/this-2.C index b521a4faf5e0..d03b8a0728ef 100644 --- a/gcc/testsuite/g++.dg/gomp/this-2.C +++ b/gcc/testsuite/g++.dg/gomp/this-2.C @@ -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 @@ -29,14 +29,14 @@ template void T::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>;