Commit e73a83fc by Richard Biener

c-typeck.c (build_unary_op): Do not expand array-refs via pointer arithmetic.

2011-04-26  Richard Guenther  <rguenther@suse.de>

	* c-typeck.c (build_unary_op): Do not expand array-refs via
	pointer arithmetic.  Only adjust qualifiers for function types.

From-SVN: r172958
parent 961562d8
......@@ -3737,12 +3737,6 @@ build_unary_op (location_t location,
tree op0 = TREE_OPERAND (arg, 0);
if (!c_mark_addressable (op0))
return error_mark_node;
return build_binary_op (location, PLUS_EXPR,
(TREE_CODE (TREE_TYPE (op0)) == ARRAY_TYPE
? array_to_pointer_conversion (location,
op0)
: op0),
TREE_OPERAND (arg, 1), 1);
}
/* Anything not already handled and not a true memory reference
......@@ -3769,10 +3763,11 @@ build_unary_op (location_t location,
argtype = TREE_TYPE (arg);
/* If the lvalue is const or volatile, merge that into the type
to which the address will point. This should only be needed
to which the address will point. This is only needed
for function types. */
if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
&& (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
&& (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg))
&& TREE_CODE (argtype) == FUNCTION_TYPE)
{
int orig_quals = TYPE_QUALS (strip_array_types (argtype));
int quals = orig_quals;
......@@ -3782,9 +3777,6 @@ build_unary_op (location_t location,
if (TREE_THIS_VOLATILE (arg))
quals |= TYPE_QUAL_VOLATILE;
gcc_assert (quals == orig_quals
|| TREE_CODE (argtype) == FUNCTION_TYPE);
argtype = c_build_qualified_type (argtype, quals);
}
......
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