typeck.c (build_array_ref): Push the array reference inside COMPOUND_EXPR and COND_EXPR.

* typeck.c (build_array_ref): Push the array reference inside
        COMPOUND_EXPR and COND_EXPR.

From-SVN: r41223
This commit is contained in:
Richard Henderson 2001-04-10 09:49:29 -07:00 committed by Richard Henderson
parent c050ec51a4
commit 0450d74d53
2 changed files with 27 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2001-04-10 Richard Henderson <rth@redhat.com>
* typeck.c (build_array_ref): Push the array reference inside
COMPOUND_EXPR and COND_EXPR.
2001-04-05 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (DECL_THIS_INLINE): Rename to DECL_DECLARED_INLINE_P.

View File

@ -2433,6 +2433,27 @@ build_array_ref (array, idx)
|| TREE_TYPE (idx) == error_mark_node)
return error_mark_node;
/* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference
inside it. */
switch (TREE_CODE (array))
{
case COMPOUND_EXPR:
{
tree value = build_array_ref (TREE_OPERAND (array, 1), idx);
return build (COMPOUND_EXPR, TREE_TYPE (value),
TREE_OPERAND (array, 0), value);
}
case COND_EXPR:
return build_conditional_expr
(TREE_OPERAND (array, 0),
build_array_ref (TREE_OPERAND (array, 1), idx),
build_array_ref (TREE_OPERAND (array, 2), idx));
default:
break;
}
if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
&& TREE_CODE (array) != INDIRECT_REF)
{
@ -2469,6 +2490,7 @@ build_array_ref (array, idx)
if (mark_addressable (array) == 0)
return error_mark_node;
}
/* An array that is indexed by a constant value which is not within
the array bounds cannot be stored in a register either; because we
would get a crash in store_bit_field/extract_bit_field when trying