Commit 13b6b773 by Eric Botcazou Committed by Eric Botcazou

trans.c (return_value_ok_for_nrv_p): Only apply the addressability check in the constrained case.

	* gcc-interface/trans.c (return_value_ok_for_nrv_p): Only apply the
	addressability check in the constrained case.

From-SVN: r248053
parent 3946f000
2017-05-15 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (return_value_ok_for_nrv_p): Only apply the
addressability check in the constrained case.
2017-05-15 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (Identifier_to_gnu): Also accept incomplete
types not coming from a limited context.
......
......@@ -3238,8 +3238,9 @@ Loop_Statement_to_gnu (Node_Id gnat_node)
RETURN_EXPR [<retval> = Ri]
[...]
and we try to fulfill a simple criterion that would make it possible to
replace one or several Ri variables with the RESULT_DECL of the function.
where the Ri are not addressable and we try to fulfill a simple criterion
that would make it possible to replace one or several Ri variables by the
single RESULT_DECL of the function.
The first observation is that RETURN_EXPRs that don't directly reference
any of the Ri variables on the RHS of their assignment are transparent wrt
......@@ -3271,8 +3272,8 @@ Loop_Statement_to_gnu (Node_Id gnat_node)
because the anonymous return object is allocated on the secondary stack
and RESULT_DECL is only a pointer to it. Each return object can be of a
different size and is allocated separately so we need not care about the
aforementioned overlapping issues. Therefore, we don't collect the other
expressions and skip step #2 in the algorithm. */
addressability and the aforementioned overlapping issues. Therefore, we
don't collect the other expressions and skip step #2 in the algorithm. */
struct nrv_data
{
......@@ -3612,7 +3613,8 @@ return_value_ok_for_nrv_p (tree ret_obj, tree ret_val)
if (TREE_STATIC (ret_val))
return false;
if (TREE_ADDRESSABLE (ret_val))
/* For the constrained case, test for addressability. */
if (ret_obj && TREE_ADDRESSABLE (ret_val))
return false;
/* For the constrained case, test for overalignment. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment