Commit d8e38554 by Eric Botcazou Committed by Eric Botcazou

trans.c (build_return_expr): Use void_type_node for MODIFY_EXPR.

	* gcc-interface/trans.c (build_return_expr): Use void_type_node for
	MODIFY_EXPR.
	* gcc-interface/utils2.c (build_binary_op) <MODIFY_EXPR>: Assert that
	the result type is null if ENABLE_CHECKING.  Set operation_type at the
	end unconditionally if not set in the previous cases.
	Use build2 and void_type_node for MODIFY_EXPR.
	(build_allocator): Use NULL_TREE for MODIFY_EXPR.

From-SVN: r178761
parent bf0b8cbe
2011-09-11 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (build_return_expr): Use void_type_node for
MODIFY_EXPR.
* gcc-interface/utils2.c (build_binary_op) <MODIFY_EXPR>: Assert that
the result type is null if ENABLE_CHECKING. Set operation_type at the
end unconditionally if not set in the previous cases.
Use build2 and void_type_node for MODIFY_EXPR.
(build_allocator): Use NULL_TREE for MODIFY_EXPR.
2011-09-08 Eric Botcazou <ebotcazou@adacore.com> 2011-09-08 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (unchecked_convert): Use a field of the right * gcc-interface/utils.c (unchecked_convert): Use a field of the right
......
...@@ -2482,7 +2482,7 @@ build_return_expr (tree ret_obj, tree ret_val) ...@@ -2482,7 +2482,7 @@ build_return_expr (tree ret_obj, tree ret_val)
if (operation_type != TREE_TYPE (ret_val)) if (operation_type != TREE_TYPE (ret_val))
ret_val = convert (operation_type, ret_val); ret_val = convert (operation_type, ret_val);
result_expr = build2 (MODIFY_EXPR, operation_type, ret_obj, ret_val); result_expr = build2 (MODIFY_EXPR, void_type_node, ret_obj, ret_val);
} }
else else
result_expr = ret_obj; result_expr = ret_obj;
......
...@@ -518,8 +518,9 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs, ...@@ -518,8 +518,9 @@ nonbinary_modular_operation (enum tree_code op_code, tree type, tree lhs,
/* Make a binary operation of kind OP_CODE. RESULT_TYPE is the type /* Make a binary operation of kind OP_CODE. RESULT_TYPE is the type
desired for the result. Usually the operation is to be performed desired for the result. Usually the operation is to be performed
in that type. For MODIFY_EXPR and ARRAY_REF, RESULT_TYPE may be 0 in that type. For INIT_EXPR and MODIFY_EXPR, RESULT_TYPE must be
in which case the type to be used will be derived from the operands. NULL_TREE. For ARRAY_REF, RESULT_TYPE may be NULL_TREE, in which
case the type to be used will be derived from the operands.
This function is very much unlike the ones for C and C++ since we This function is very much unlike the ones for C and C++ since we
have already done any type conversion and matching required. All we have already done any type conversion and matching required. All we
...@@ -557,6 +558,9 @@ build_binary_op (enum tree_code op_code, tree result_type, ...@@ -557,6 +558,9 @@ build_binary_op (enum tree_code op_code, tree result_type,
{ {
case INIT_EXPR: case INIT_EXPR:
case MODIFY_EXPR: case MODIFY_EXPR:
#ifdef ENABLE_CHECKING
gcc_assert (result_type == NULL_TREE);
#endif
/* If there were integral or pointer conversions on the LHS, remove /* If there were integral or pointer conversions on the LHS, remove
them; we'll be putting them back below if needed. Likewise for them; we'll be putting them back below if needed. Likewise for
conversions between array and record types, except for justified conversions between array and record types, except for justified
...@@ -633,7 +637,7 @@ build_binary_op (enum tree_code op_code, tree result_type, ...@@ -633,7 +637,7 @@ build_binary_op (enum tree_code op_code, tree result_type,
operation_type = best_type; operation_type = best_type;
/* Otherwise use the LHS type. */ /* Otherwise use the LHS type. */
else if (!operation_type) else
operation_type = left_type; operation_type = left_type;
/* Ensure everything on the LHS is valid. If we have a field reference, /* Ensure everything on the LHS is valid. If we have a field reference,
...@@ -955,6 +959,8 @@ build_binary_op (enum tree_code op_code, tree result_type, ...@@ -955,6 +959,8 @@ build_binary_op (enum tree_code op_code, tree result_type,
else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF) else if (op_code == ARRAY_REF || op_code == ARRAY_RANGE_REF)
result = fold (build4 (op_code, operation_type, left_operand, result = fold (build4 (op_code, operation_type, left_operand,
right_operand, NULL_TREE, NULL_TREE)); right_operand, NULL_TREE, NULL_TREE));
else if (op_code == INIT_EXPR || op_code == MODIFY_EXPR)
result = build2 (op_code, void_type_node, left_operand, right_operand);
else else
result result
= fold_build2 (op_code, operation_type, left_operand, right_operand); = fold_build2 (op_code, operation_type, left_operand, right_operand);
...@@ -2114,7 +2120,7 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, ...@@ -2114,7 +2120,7 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
(result_type, (result_type,
build2 (COMPOUND_EXPR, storage_ptr_type, build2 (COMPOUND_EXPR, storage_ptr_type,
build_binary_op build_binary_op
(MODIFY_EXPR, storage_type, (MODIFY_EXPR, NULL_TREE,
build_unary_op (INDIRECT_REF, NULL_TREE, build_unary_op (INDIRECT_REF, NULL_TREE,
convert (storage_ptr_type, storage)), convert (storage_ptr_type, storage)),
gnat_build_constructor (storage_type, v)), gnat_build_constructor (storage_type, v)),
...@@ -2124,7 +2130,7 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, ...@@ -2124,7 +2130,7 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
return build2 return build2
(COMPOUND_EXPR, result_type, (COMPOUND_EXPR, result_type,
build_binary_op build_binary_op
(MODIFY_EXPR, template_type, (MODIFY_EXPR, NULL_TREE,
build_component_ref build_component_ref
(build_unary_op (INDIRECT_REF, NULL_TREE, (build_unary_op (INDIRECT_REF, NULL_TREE,
convert (storage_ptr_type, storage)), convert (storage_ptr_type, storage)),
......
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