PR c++/70584 - don't force indirection to an rvalue
* cp-gimplify.c (cp_fold_maybe_rvalue): Loop in case cp_fold returns a decl. (cp_fold) [INDIRECT_REF]: Don't fold to an rvalue. From-SVN: r236670
This commit is contained in:
parent
732eb07625
commit
66f90a1761
2 changed files with 21 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
|||
2016-05-24 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/70584
|
||||
* cp-gimplify.c (cp_fold_maybe_rvalue): Loop in case cp_fold
|
||||
returns a decl.
|
||||
(cp_fold) [INDIRECT_REF]: Don't fold to an rvalue.
|
||||
|
||||
2016-05-24 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c++/71147
|
||||
|
|
|
@ -1878,13 +1878,21 @@ cp_fully_fold (tree x)
|
|||
static tree
|
||||
cp_fold_maybe_rvalue (tree x, bool rval)
|
||||
{
|
||||
if (rval && DECL_P (x))
|
||||
while (true)
|
||||
{
|
||||
tree v = decl_constant_value (x);
|
||||
if (v != error_mark_node)
|
||||
x = v;
|
||||
x = cp_fold (x);
|
||||
if (rval && DECL_P (x))
|
||||
{
|
||||
tree v = decl_constant_value (x);
|
||||
if (v != x && v != error_mark_node)
|
||||
{
|
||||
x = v;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return cp_fold (x);
|
||||
return x;
|
||||
}
|
||||
|
||||
/* Fold expression X which is used as an rvalue. */
|
||||
|
@ -2001,7 +2009,7 @@ cp_fold (tree x)
|
|||
if (REF_PARENTHESIZED_P (x))
|
||||
{
|
||||
tree p = maybe_undo_parenthesized_ref (x);
|
||||
return cp_fold_maybe_rvalue (p, rval_ops);
|
||||
return cp_fold (p);
|
||||
}
|
||||
goto unary;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue