diff options
author | Richard Guenther <rguenther@suse.de> | 2009-03-01 20:49:14 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-03-01 20:49:14 +0000 |
commit | 14e5b28507bfb7b6e17ff390db4ca0cbaa6f78ee (patch) | |
tree | c7f88399899b839eecb76853407bd4323bdca79c | |
parent | f4ea99bd34969e6d0da33cf61bb70074d797aa6c (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/omp-low.c | 9 |
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); |