aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 221afba..8f70747 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1028,7 +1028,7 @@ make_node (code)
else
{
t = (tree) obstack_alloc (obstack, length);
- bzero ((PTR) t, length);
+ memset ((PTR) t, 0, length);
}
#ifdef GATHER_STATISTICS
@@ -3115,8 +3115,10 @@ build1 (code, type, node)
if (ggc_p)
t = ggc_alloc_tree (length);
else
- t = (tree) obstack_alloc (obstack, length);
- bzero ((PTR) t, length);
+ {
+ t = (tree) obstack_alloc (obstack, length);
+ memset ((PTR) t, 0, length);
+ }
#ifdef GATHER_STATISTICS
tree_node_counts[(int)kind]++;
@@ -3138,6 +3140,25 @@ build1 (code, type, node)
TREE_RAISES (t) = 1;
}
+ switch (code)
+ {
+ case INIT_EXPR:
+ case MODIFY_EXPR:
+ case VA_ARG_EXPR:
+ case RTL_EXPR:
+ case PREDECREMENT_EXPR:
+ case PREINCREMENT_EXPR:
+ case POSTDECREMENT_EXPR:
+ case POSTINCREMENT_EXPR:
+ /* All of these have side-effects, no matter what their
+ operands are. */
+ TREE_SIDE_EFFECTS (t) = 1;
+ break;
+
+ default:
+ break;
+ }
+
return t;
}