Commit 87fa3d34 by Eric Botcazou Committed by Eric Botcazou

utils2.c (build_cond_expr): Take the address and dereference if the result type…

utils2.c (build_cond_expr): Take the address and dereference if the result type is passed by reference.

	* gcc-interface/utils2.c (build_cond_expr): Take the address and
	dereference if the result type is passed by reference.

From-SVN: r158201
parent 9c69c3af
2010-04-11 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils2.c (build_cond_expr): Take the address and
dereference if the result type is passed by reference.
2010-04-11 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (Case_Statement_to_gnu): Bool-ify variable.
(gnat_to_gnu) <N_Null_Statement>: When not optimizing, generate a
goto to the next statement.
......
......@@ -1291,10 +1291,12 @@ build_cond_expr (tree result_type, tree condition_operand,
true_operand = convert (result_type, true_operand);
false_operand = convert (result_type, false_operand);
/* If the result type is unconstrained, take the address of the operands
and then dereference our result. */
/* If the result type is unconstrained, take the address of the operands and
then dereference the result. Likewise if the result type is passed by
reference because creating a temporary of this type is not allowed. */
if (TREE_CODE (result_type) == UNCONSTRAINED_ARRAY_TYPE
|| CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type)))
|| CONTAINS_PLACEHOLDER_P (TYPE_SIZE (result_type))
|| (AGGREGATE_TYPE_P (result_type) && TYPE_BY_REFERENCE_P (result_type)))
{
result_type = build_pointer_type (result_type);
true_operand = build_unary_op (ADDR_EXPR, result_type, true_operand);
......
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