tree.c (build): Don't look at TREE_SIDE_EFFECTS or TREE_RAISES for non-trees.

* tree.c (build): Don't look at TREE_SIDE_EFFECTS or TREE_RAISES
	for non-trees.
	(build1): Likewise.

From-SVN: r29764
This commit is contained in:
Mark Mitchell 1999-10-02 08:52:17 +00:00 committed by Mark Mitchell
parent 06900a3427
commit 97ca93c3ae
2 changed files with 35 additions and 10 deletions

View File

@ -1,3 +1,9 @@
Sat Oct 2 02:48:21 1999 Mark P. Mitchell <mark@codesourcery.com>
* tree.c (build): Don't look at TREE_SIDE_EFFECTS or TREE_RAISES
for non-trees.
(build1): Likewise.
Fri Oct 1 18:01:11 1999 Bernd Schmidt <bernds@cygnus.co.uk>
* i386elf.h (TARGET_DEFAULT): Use symbolic constants.

View File

@ -2990,6 +2990,7 @@ build VPROTO((enum tree_code code, tree tt, ...))
register tree t;
register int length;
register int i;
int fro;
VA_START (p, tt);
@ -3002,6 +3003,12 @@ build VPROTO((enum tree_code code, tree tt, ...))
length = tree_code_length[(int) code];
TREE_TYPE (t) = tt;
/* Below, we automatically set TREE_SIDE_EFFECTS and TREE_RAISED for
the result based on those same flags for the arguments. But, if
the arguments aren't really even `tree' expressions, we shouldn't
be trying to do this. */
fro = first_rtl_op (code);
if (length == 2)
{
/* This is equivalent to the loop below, but faster. */
@ -3009,11 +3016,20 @@ build VPROTO((enum tree_code code, tree tt, ...))
register tree arg1 = va_arg (p, tree);
TREE_OPERAND (t, 0) = arg0;
TREE_OPERAND (t, 1) = arg1;
if ((arg0 && TREE_SIDE_EFFECTS (arg0))
|| (arg1 && TREE_SIDE_EFFECTS (arg1)))
TREE_SIDE_EFFECTS (t) = 1;
TREE_RAISES (t)
= (arg0 && TREE_RAISES (arg0)) || (arg1 && TREE_RAISES (arg1));
if (arg0 && fro > 0)
{
if (TREE_SIDE_EFFECTS (arg0))
TREE_SIDE_EFFECTS (t) = 1;
if (TREE_RAISES (arg0))
TREE_RAISES (t) = 1;
}
if (arg1 && fro > 1)
{
if (TREE_SIDE_EFFECTS (arg1))
TREE_SIDE_EFFECTS (t) = 1;
if (TREE_RAISES (arg1))
TREE_RAISES (t) = 1;
}
}
else if (length == 1)
{
@ -3023,9 +3039,12 @@ build VPROTO((enum tree_code code, tree tt, ...))
if (TREE_CODE_CLASS (code) != 's')
abort ();
TREE_OPERAND (t, 0) = arg0;
if (arg0 && TREE_SIDE_EFFECTS (arg0))
TREE_SIDE_EFFECTS (t) = 1;
TREE_RAISES (t) = (arg0 && TREE_RAISES (arg0));
if (fro > 0)
{
if (arg0 && TREE_SIDE_EFFECTS (arg0))
TREE_SIDE_EFFECTS (t) = 1;
TREE_RAISES (t) = (arg0 && TREE_RAISES (arg0));
}
}
else
{
@ -3033,7 +3052,7 @@ build VPROTO((enum tree_code code, tree tt, ...))
{
register tree operand = va_arg (p, tree);
TREE_OPERAND (t, i) = operand;
if (operand)
if (operand && fro > i)
{
if (TREE_SIDE_EFFECTS (operand))
TREE_SIDE_EFFECTS (t) = 1;
@ -3090,7 +3109,7 @@ build1 (code, type, node)
TREE_PERMANENT (t) = 1;
TREE_OPERAND (t, 0) = node;
if (node)
if (node && first_rtl_op (code) != 0)
{
if (TREE_SIDE_EFFECTS (node))
TREE_SIDE_EFFECTS (t) = 1;