From 14e5b28507bfb7b6e17ff390db4ca0cbaa6f78ee Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sun, 1 Mar 2009 20:49:14 +0000 Subject: [PATCH] re PR tree-optimization/39331 (OpenMP and return-slot-optimization generate invalid gimple) 2009-03-01 Richard Guenther 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 --- gcc/ChangeLog | 6 ++++++ gcc/omp-low.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1365b591649..cada14d8be4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-03-01 Richard Guenther + + 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 PR debug/39267 diff --git a/gcc/omp-low.c b/gcc/omp-low.c index b7885e6cf3c..dce89fa2464 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); -- 2.30.2