Commit b24f7345 by Eric Botcazou Committed by Eric Botcazou

decl.c (gnat_to_gnu_entity): Make sure the size of a padding type built around…

decl.c (gnat_to_gnu_entity): Make sure the size of a padding type built around the return type is positive.

	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Function>: Make sure
	the size of a padding type built around the return type is positive.
	* gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>:
	Use INIT_EXPR instead of MODIFY_EXPR to assign to the return object.

From-SVN: r224697
parent 1539357d
2015-06-19 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Function>: Make sure
the size of a padding type built around the return type is positive.
* gcc-interface/trans.c (gnat_to_gnu) <N_Simple_Return_Statement>:
Use INIT_EXPR instead of MODIFY_EXPR to assign to the return object.
2015-06-17 Andrew MacLeod <amacleod@redhat.com>
* gcc-interface/cuintp.c: Do not include input.h, line-map.h or is-a.h.
......
......@@ -4242,12 +4242,23 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_return_type)))
{
tree orig_type = gnu_return_type;
tree max_return_size
= max_size (TYPE_SIZE (gnu_return_type), true);
/* If the size overflows to 0, set it to an arbitrary positive
value so that assignments in the type are preserved. Their
actual size is independent of this positive value. */
if (TREE_CODE (max_return_size) == INTEGER_CST
&& TREE_OVERFLOW (max_return_size)
&& integer_zerop (max_return_size))
{
max_return_size = copy_node (bitsize_unit_node);
TREE_OVERFLOW (max_return_size) = 1;
}
gnu_return_type
= maybe_pad_type (gnu_return_type,
max_size (TYPE_SIZE (gnu_return_type),
true),
0, gnat_entity, false, false, definition,
= maybe_pad_type (gnu_return_type, max_return_size, 0,
gnat_entity, false, false, definition,
true);
/* Declare it now since it will never be declared otherwise.
......
......@@ -6861,7 +6861,7 @@ gnat_to_gnu (Node_Id gnat_node)
tree gnu_ret_deref
= build_unary_op (INDIRECT_REF, TREE_TYPE (gnu_ret_val),
gnu_ret_obj);
gnu_result = build2 (MODIFY_EXPR, void_type_node,
gnu_result = build2 (INIT_EXPR, void_type_node,
gnu_ret_deref, gnu_ret_val);
add_stmt_with_node (gnu_result, gnat_node);
gnu_ret_val = NULL_TREE;
......
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