Commit 6a9db54c by Eric Botcazou Committed by Eric Botcazou

trans.c (Call_to_gnu): If this is a function call and there is no target...

	* gcc-interface/trans.c (Call_to_gnu): If this is a function call and
	there is no target, do not create a temporary for the return value for
	an allocator either.

From-SVN: r251695
parent a0f8cad6
2017-09-05 Eric Botcazou <ebotcazou@adacore.com> 2017-09-05 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (Call_to_gnu): If this is a function call and
there is no target, do not create a temporary for the return value for
an allocator either.
2017-09-05 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (pos_to_constructor): Skip conversions to an * gcc-interface/trans.c (pos_to_constructor): Skip conversions to an
unconstrained array type. unconstrained array type.
......
...@@ -4338,11 +4338,11 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, ...@@ -4338,11 +4338,11 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
parameters. parameters.
2. There is no target and the call is made for neither an object nor a 2. There is no target and the call is made for neither an object nor a
renaming declaration, nor a return statement, and the return type has renaming declaration, nor a return statement, nor an allocator, and
variable size, because in this case the gimplifier cannot create the the return type has variable size because in this case the gimplifier
temporary, or more generally is simply an aggregate type, because the cannot create the temporary, or more generally is simply an aggregate
gimplifier would create the temporary in the outermost scope instead type, because the gimplifier would then create the temporary in the
of locally. outermost scope instead of locally.
3. There is a target and it is a slice or an array with fixed size, 3. There is a target and it is a slice or an array with fixed size,
and the return type has variable size, because the gimplifier and the return type has variable size, because the gimplifier
...@@ -4361,6 +4361,8 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, ...@@ -4361,6 +4361,8 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target,
&& Nkind (Parent (gnat_node)) != N_Object_Declaration && Nkind (Parent (gnat_node)) != N_Object_Declaration
&& Nkind (Parent (gnat_node)) != N_Object_Renaming_Declaration && Nkind (Parent (gnat_node)) != N_Object_Renaming_Declaration
&& Nkind (Parent (gnat_node)) != N_Simple_Return_Statement && Nkind (Parent (gnat_node)) != N_Simple_Return_Statement
&& !(Nkind (Parent (gnat_node)) == N_Qualified_Expression
&& Nkind (Parent (Parent (gnat_node))) == N_Allocator)
&& AGGREGATE_TYPE_P (gnu_result_type) && AGGREGATE_TYPE_P (gnu_result_type)
&& !TYPE_IS_FAT_POINTER_P (gnu_result_type)) && !TYPE_IS_FAT_POINTER_P (gnu_result_type))
|| (gnu_target || (gnu_target
......
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