aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-03-01 20:49:14 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-03-01 20:49:14 +0000
commit14e5b28507bfb7b6e17ff390db4ca0cbaa6f78ee (patch)
treec7f88399899b839eecb76853407bd4323bdca79c /gcc
parentf4ea99bd34969e6d0da33cf61bb70074d797aa6c (diff)
downloadgcc-14e5b28507bfb7b6e17ff390db4ca0cbaa6f78ee.zip
gcc-14e5b28507bfb7b6e17ff390db4ca0cbaa6f78ee.tar.gz
gcc-14e5b28507bfb7b6e17ff390db4ca0cbaa6f78ee.tar.bz2
re PR tree-optimization/39331 (OpenMP and return-slot-optimization generate invalid gimple)
2009-03-01 Richard Guenther <rguenther@suse.de> PR tree-optimization/39331 * omp-low.c (lower_send_shared_vars): Do not receive new values for the reference of DECL_BY_REFERENCE parms or results. From-SVN: r144531
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/omp-low.c9
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1365b59..cada14d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-01 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/39331
+ * omp-low.c (lower_send_shared_vars): Do not receive new
+ values for the reference of DECL_BY_REFERENCE parms or results.
+
2009-03-01 Jan Hubicka <jh@suse.cz>
PR debug/39267
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index b7885e6..dce89fa 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -2821,7 +2821,14 @@ lower_send_shared_vars (gimple_seq *ilist, gimple_seq *olist, omp_context *ctx)
x = build_sender_ref (ovar, ctx);
gimplify_assign (x, var, ilist);
- if (!TREE_READONLY (var))
+ if (!TREE_READONLY (var)
+ /* We don't need to receive a new reference to a result
+ or parm decl. In fact we may not store to it as we will
+ invalidate any pending RSO and generate wrong gimple
+ during inlining. */
+ && !((TREE_CODE (var) == RESULT_DECL
+ || TREE_CODE (var) == PARM_DECL)
+ && DECL_BY_REFERENCE (var)))
{
x = build_sender_ref (ovar, ctx);
gimplify_assign (var, x, olist);