summaryrefslogtreecommitdiff
path: root/gcc/tree-nrv.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-nrv.c')
-rw-r--r--gcc/tree-nrv.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/tree-nrv.c b/gcc/tree-nrv.c
index 2f40d563d33..8ee3b8b0a4b 100644
--- a/gcc/tree-nrv.c
+++ b/gcc/tree-nrv.c
@@ -296,7 +296,7 @@ struct gimple_opt_pass pass_nrv =
optimization, where DEST is expected to be the LHS of a modify
expression where the RHS is a function returning an aggregate.
- DEST is available if it is not clobbered by the call. */
+ DEST is available if it is not clobbered or used by the call. */
static bool
dest_safe_for_nrv_p (gimple call)
@@ -310,7 +310,8 @@ dest_safe_for_nrv_p (gimple call)
if (TREE_CODE (dest) == SSA_NAME)
return true;
- if (call_may_clobber_ref_p (call, dest))
+ if (call_may_clobber_ref_p (call, dest)
+ || ref_maybe_used_by_stmt_p (call, dest))
return false;
return true;
@@ -345,8 +346,7 @@ execute_return_slot_opt (void)
&& gimple_call_lhs (stmt)
&& !gimple_call_return_slot_opt_p (stmt)
&& aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)),
- gimple_call_fndecl (stmt))
- )
+ gimple_call_fndecl (stmt)))
{
/* Check if the location being assigned to is
clobbered by the call. */