diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 21 | ||||
-rw-r--r-- | gcc/gimplify.c | 10 |
4 files changed, 32 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 13cdde3..b76b3dd1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2007-02-07 Jakub Jelinek <jakub@redhat.com> + PR c++/30703 + * gimplify.c (gimplify_scan_omp_clauses): Remove special casing + of INDIRECT_REF <RESULT_DECL>. + * config/i386/i386.c (override_options): Set PTA_SSSE3 for core2. 2007-02-06 J"orn Rennecke <joern.rennecke@arc.com> diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 00892e9..59f7260 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2007-02-07 Jakub Jelinek <jakub@redhat.com> + + PR c++/30703 + * cp-gimplify.c (cp_genericize_r): Don't dereference invisiref + parameters and result decls in omp clauses. + (cxx_omp_privatize_by_reference): Pass also invisiref PARM_DECLs + by reference. + 2007-02-05 Dirk Mueller <dmueller@suse.de> PR bootstrap/30510 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); } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 1e99757..7ac43f4 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -4747,11 +4747,6 @@ gimplify_scan_omp_clauses (tree *list_p, tree *pre_p, bool in_parallel, remove = true; break; } - /* Handle NRV results passed by reference. */ - if (TREE_CODE (decl) == INDIRECT_REF - && TREE_CODE (TREE_OPERAND (decl, 0)) == RESULT_DECL - && DECL_BY_REFERENCE (TREE_OPERAND (decl, 0))) - OMP_CLAUSE_DECL (c) = decl = TREE_OPERAND (decl, 0); omp_add_variable (ctx, decl, flags); if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c)) @@ -4779,11 +4774,6 @@ gimplify_scan_omp_clauses (tree *list_p, tree *pre_p, bool in_parallel, remove = true; break; } - /* Handle NRV results passed by reference. */ - if (TREE_CODE (decl) == INDIRECT_REF - && TREE_CODE (TREE_OPERAND (decl, 0)) == RESULT_DECL - && DECL_BY_REFERENCE (TREE_OPERAND (decl, 0))) - OMP_CLAUSE_DECL (c) = decl = TREE_OPERAND (decl, 0); do_notice: if (outer_ctx) omp_notice_variable (outer_ctx, decl, true); |