expr.c (force_evaluation_order): Match wrapped ctor calls, locate arguments accordingly.
2001-06-04 Alexandre Petit-Bianco <apbianco@redhat.com> * expr.c (force_evaluation_order): Match wrapped ctor calls, locate arguments accordingly. (http://gcc.gnu.org/ml/gcc-patches/2001-06/msg00214.html) From-SVN: r42910
This commit is contained in:
parent
7f471801f0
commit
0c90837b16
@ -1,3 +1,8 @@
|
|||||||
|
2001-06-04 Alexandre Petit-Bianco <apbianco@redhat.com>
|
||||||
|
|
||||||
|
* expr.c (force_evaluation_order): Match wrapped ctor calls, locate
|
||||||
|
arguments accordingly.
|
||||||
|
|
||||||
2001-06-02 Joseph S. Myers <jsm28@cam.ac.uk>
|
2001-06-02 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||||
|
|
||||||
* gcj.texi: Move contents to just after title page.
|
* gcj.texi: Move contents to just after title page.
|
||||||
|
@ -3263,16 +3263,31 @@ force_evaluation_order (node)
|
|||||||
if (TREE_SIDE_EFFECTS (TREE_OPERAND (node, 1)))
|
if (TREE_SIDE_EFFECTS (TREE_OPERAND (node, 1)))
|
||||||
TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
|
TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
|
||||||
}
|
}
|
||||||
else if (TREE_CODE (node) == CALL_EXPR || TREE_CODE (node) == NEW_CLASS_EXPR)
|
else if (TREE_CODE (node) == CALL_EXPR
|
||||||
|
|| TREE_CODE (node) == NEW_CLASS_EXPR
|
||||||
|
|| (TREE_CODE (node) == COMPOUND_EXPR
|
||||||
|
&& TREE_CODE (TREE_OPERAND (node, 0)) == CALL_EXPR
|
||||||
|
&& TREE_CODE (TREE_OPERAND (node, 1)) == SAVE_EXPR))
|
||||||
{
|
{
|
||||||
tree arg, cmp;
|
tree arg, cmp;
|
||||||
|
|
||||||
if (!TREE_OPERAND (node, 1))
|
if (!TREE_OPERAND (node, 1))
|
||||||
return node;
|
return node;
|
||||||
|
|
||||||
|
arg = node;
|
||||||
|
|
||||||
|
/* Position arg properly, account for wrapped around ctors. */
|
||||||
|
if (TREE_CODE (node) == COMPOUND_EXPR)
|
||||||
|
arg = TREE_OPERAND (node, 0);
|
||||||
|
|
||||||
|
arg = TREE_OPERAND (arg, 1);
|
||||||
|
|
||||||
|
/* Not having a list of argument here is an error. */
|
||||||
|
if (TREE_CODE (arg) != TREE_LIST)
|
||||||
|
abort ();
|
||||||
|
|
||||||
/* This reverses the evaluation order. This is a desired effect. */
|
/* This reverses the evaluation order. This is a desired effect. */
|
||||||
for (cmp = NULL_TREE, arg = TREE_OPERAND (node, 1);
|
for (cmp = NULL_TREE; arg; arg = TREE_CHAIN (arg))
|
||||||
arg; arg = TREE_CHAIN (arg))
|
|
||||||
{
|
{
|
||||||
tree saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
|
tree saved = save_expr (force_evaluation_order (TREE_VALUE (arg)));
|
||||||
cmp = (cmp == NULL_TREE ? saved :
|
cmp = (cmp == NULL_TREE ? saved :
|
||||||
|
Loading…
Reference in New Issue
Block a user