or copied into our original target. */
tree slot = TREE_OPERAND (exp, 0);
+ tree exp1;
if (TREE_CODE (slot) != VAR_DECL)
abort ();
if (DECL_RTL (slot) != 0)
{
target = DECL_RTL (slot);
- /* We have already expanded the slot, so don't do
+ /* If we have already expanded the slot, so don't do
it again. (mrs) */
- return target;
+ if (TREE_OPERAND (exp, 1) == NULL_TREE)
+ return target;
}
else
{
DECL_RTL (slot) = target;
}
- return expand_expr (TREE_OPERAND (exp, 1), target, tmode, modifier);
+ exp1 = TREE_OPERAND (exp, 1);
+ /* Mark it as expanded. */
+ TREE_OPERAND (exp, 1) = NULL_TREE;
+
+ return expand_expr (exp1, target, tmode, modifier);
}
case INIT_EXPR: