revert: c-typeck.c (default_function_array_conversion): Always create &a[0] for array types.
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu> Revert: 2004-10-17 Andrew Pinski <pinskia@physics.uc.edu> * c-typeck.c (default_function_array_conversion): Always create &a[0] for array types. (build_unary_op): Do not fold &a[x] into a + x. From-SVN: r89183
This commit is contained in:
parent
ac8245fadc
commit
7c672dfc01
|
@ -1,3 +1,12 @@
|
|||
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
Revert:
|
||||
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
* c-typeck.c (default_function_array_conversion): Always create
|
||||
&a[0] for array types.
|
||||
(build_unary_op): Do not fold &a[x] into a + x.
|
||||
|
||||
2004-10-17 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
PR middle-end/17925
|
||||
|
|
|
@ -1263,9 +1263,21 @@ default_function_array_conversion (tree exp)
|
|||
|
||||
ptrtype = build_pointer_type (restype);
|
||||
|
||||
if (TREE_CODE (exp) == VAR_DECL)
|
||||
{
|
||||
/* We are making an ADDR_EXPR of ptrtype. This is a valid
|
||||
ADDR_EXPR because it's the best way of representing what
|
||||
happens in C when we take the address of an array and place
|
||||
it in a pointer to the element type. */
|
||||
adr = build1 (ADDR_EXPR, ptrtype, exp);
|
||||
if (!c_mark_addressable (exp))
|
||||
return error_mark_node;
|
||||
TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
|
||||
return adr;
|
||||
}
|
||||
/* This way is better for a COMPONENT_REF since it can
|
||||
simplify the offset for a component. */
|
||||
adr = build_unary_op (ADDR_EXPR, build_array_ref (exp, integer_zero_node), 1);
|
||||
adr = build_unary_op (ADDR_EXPR, exp, 1);
|
||||
return convert (ptrtype, adr);
|
||||
}
|
||||
return exp;
|
||||
|
@ -2619,12 +2631,13 @@ build_unary_op (enum tree_code code, tree xarg, int flag)
|
|||
return TREE_OPERAND (arg, 0);
|
||||
}
|
||||
|
||||
/* For &x[y], just return &x[y] */
|
||||
/* For &x[y], return x+y */
|
||||
if (TREE_CODE (arg) == ARRAY_REF)
|
||||
{
|
||||
if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
|
||||
return error_mark_node;
|
||||
return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), arg);
|
||||
return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
|
||||
TREE_OPERAND (arg, 1), 1);
|
||||
}
|
||||
|
||||
/* Anything not already handled and not a true memory reference
|
||||
|
|
Loading…
Reference in New Issue