aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/cp-gimplify.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/cp-gimplify.c')
-rw-r--r--gcc/cp/cp-gimplify.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index 08d22d5..5ee1931 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -672,6 +672,25 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data)
&& is_invisiref_parm (TREE_OPERAND (stmt, 0)))
/* Don't dereference an invisiref RESULT_DECL inside a RETURN_EXPR. */
*walk_subtrees = 0;
+ else if (TREE_CODE (stmt) == OMP_CLAUSE)
+ switch (OMP_CLAUSE_CODE (stmt))
+ {
+ case OMP_CLAUSE_PRIVATE:
+ case OMP_CLAUSE_SHARED:
+ case OMP_CLAUSE_FIRSTPRIVATE:
+ case OMP_CLAUSE_LASTPRIVATE:
+ case OMP_CLAUSE_COPYIN:
+ case OMP_CLAUSE_COPYPRIVATE:
+ /* Don't dereference an invisiref in OpenMP clauses. */
+ if (is_invisiref_parm (OMP_CLAUSE_DECL (stmt)))
+ *walk_subtrees = 0;
+ break;
+ case OMP_CLAUSE_REDUCTION:
+ gcc_assert (!is_invisiref_parm (OMP_CLAUSE_DECL (stmt)));
+ break;
+ default:
+ break;
+ }
else if (IS_TYPE_OR_DECL_P (stmt))
*walk_subtrees = 0;
@@ -911,5 +930,5 @@ cxx_omp_clause_dtor (tree clause, tree decl)
bool
cxx_omp_privatize_by_reference (tree decl)
{
- return TREE_CODE (decl) == RESULT_DECL && DECL_BY_REFERENCE (decl);
+ return is_invisiref_parm (decl);
}