diff options
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 27 |
1 files changed, 24 insertions, 3 deletions
@@ -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; } |