diff options
author | Mike Stump <mrs@gcc.gnu.org> | 1997-06-12 19:23:12 +0000 |
---|---|---|
committer | Mike Stump <mrs@gcc.gnu.org> | 1997-06-12 19:23:12 +0000 |
commit | b96257b6df86d010bb9b2487c09364699b0bbcea (patch) | |
tree | 0516ac989f6b21d40215438522c2a925909a8ca7 | |
parent | f5546425e91646b6997ed7ceb397f84db9b26271 (diff) | |
download | gcc-b96257b6df86d010bb9b2487c09364699b0bbcea.zip gcc-b96257b6df86d010bb9b2487c09364699b0bbcea.tar.gz gcc-b96257b6df86d010bb9b2487c09364699b0bbcea.tar.bz2 |
tree.c (unsave_expr_now): Avoid recursing into the parts of the tree that are RTL.
* tree.c (unsave_expr_now): Avoid recursing into the parts of
the tree that are RTL.
From-SVN: r14230
-rw-r--r-- | gcc/tree.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -2316,15 +2316,18 @@ unsave_expr_now (expr) { enum tree_code code; register int i; + int first_rtl; if (expr == NULL_TREE) return expr; code = TREE_CODE (expr); + first_rtl = tree_code_length [(int) code]; switch (code) { case SAVE_EXPR: SAVE_EXPR_RTL (expr) = 0; + first_rtl = 2; break; case TARGET_EXPR: @@ -2336,6 +2339,7 @@ unsave_expr_now (expr) /* I don't yet know how to emit a sequence multiple times. */ if (RTL_EXPR_SEQUENCE (expr) != 0) abort (); + first_rtl = 0; break; case CALL_EXPR: @@ -2350,6 +2354,16 @@ unsave_expr_now (expr) exp = TREE_CHAIN (exp); } } + first_rtl = 2; + break; + + case WITH_CLEANUP_EXPR: + /* Should be defined to be 2. */ + first_rtl = 1; + break; + + case METHOD_CALL_EXPR: + first_rtl = 3; break; } @@ -2368,7 +2382,7 @@ unsave_expr_now (expr) case '<': /* a comparison expression */ case '2': /* a binary arithmetic expression */ case '1': /* a unary arithmetic expression */ - for (i = tree_code_length[(int) code] - 1; i >= 0; i--) + for (i = first_rtl - 1; i >= 0; i--) unsave_expr_now (TREE_OPERAND (expr, i)); return expr; |