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.
/* 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, but this is natively handled in the gimplifier. */
+ 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);