Commit 2cde2255 by Richard Kenner

(expand_expr, case PLACEHOLDER_EXPR): Find innermost matching and

don't check contains_placeholder_p.

From-SVN: r14605
parent cc3c7c13
......@@ -5023,36 +5023,28 @@ expand_expr (exp, target, tmode, modifier)
tree old_list = placeholder_list;
tree elt;
/* See if the object is the type that we want and does not contain
this PLACEHOLDER_EXPR itself. Then see if the operand of any
reference is the type we want. */
/* See if the object is the type that we want. */
if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_PURPOSE (placeholder_list)))
== need_type)
&& (! contains_this_placeholder_p
(TREE_PURPOSE (placeholder_list), exp)))
== need_type))
object = TREE_PURPOSE (placeholder_list);
else
/* Find the outermost reference that is of the type we want and
that does not itself contain this PLACEHOLDER_EXPR. */
for (elt = TREE_PURPOSE (placeholder_list);
elt != 0
&& (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == 'e');
elt = ((TREE_CODE (elt) == COMPOUND_EXPR
|| TREE_CODE (elt) == COND_EXPR)
? TREE_OPERAND (elt, 1) : TREE_OPERAND (elt, 0)))
if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0)))
== need_type)
&& ! contains_this_placeholder_p (TREE_OPERAND (elt, 0),
exp))
{
object = TREE_OPERAND (elt, 0);
break;
}
/* Find the innermost reference that is of the type we want. */
for (elt = TREE_PURPOSE (placeholder_list);
elt != 0
&& (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == '1'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == '2'
|| TREE_CODE_CLASS (TREE_CODE (elt)) == 'e');
elt = ((TREE_CODE (elt) == COMPOUND_EXPR
|| TREE_CODE (elt) == COND_EXPR)
? TREE_OPERAND (elt, 1) : TREE_OPERAND (elt, 0)))
if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r'
&& (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0)))
== need_type))
{
object = TREE_OPERAND (elt, 0);
break;
}
if (object != 0)
{
......
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