Commit b235734c by Eric Botcazou Committed by Eric Botcazou

utils2.c (build_unary_op): Propagate the TYPE_REF_CAN_ALIAS_ALL flag to the result.

	* utils2.c (build_unary_op) <ADDR_EXPR> [INDIRECT_REF]: Propagate
	the TYPE_REF_CAN_ALIAS_ALL flag to the result.

From-SVN: r128669
parent e1210bd0
2007-09-22 Eric Botcazou <ebotcazou@adacore.com>
* utils2.c (build_unary_op) <ADDR_EXPR> [INDIRECT_REF]: Propagate
the TYPE_REF_CAN_ALIAS_ALL flag to the result.
2007-09-21 Olivier Hainque <hainque@adacore.com> 2007-09-21 Olivier Hainque <hainque@adacore.com>
* utils.c (type_for_nonaliased_component_p): Return false for * utils.c (type_for_nonaliased_component_p): Return false for
...@@ -1078,6 +1078,25 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) ...@@ -1078,6 +1078,25 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand)
GCC wants pointer types for function addresses. */ GCC wants pointer types for function addresses. */
if (!result_type) if (!result_type)
result_type = build_pointer_type (type); result_type = build_pointer_type (type);
/* If the underlying object can alias everything, propagate the
property since we are effectively retrieving the object. */
if (POINTER_TYPE_P (TREE_TYPE (result))
&& TYPE_REF_CAN_ALIAS_ALL (TREE_TYPE (result)))
{
if (TREE_CODE (result_type) == POINTER_TYPE
&& !TYPE_REF_CAN_ALIAS_ALL (result_type))
result_type
= build_pointer_type_for_mode (TREE_TYPE (result_type),
TYPE_MODE (result_type),
true);
else if (TREE_CODE (result_type) == REFERENCE_TYPE
&& !TYPE_REF_CAN_ALIAS_ALL (result_type))
result_type
= build_reference_type_for_mode (TREE_TYPE (result_type),
TYPE_MODE (result_type),
true);
}
break; break;
case NULL_EXPR: case NULL_EXPR:
......
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