diff options
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/tree.c | 2 | ||||
-rw-r--r-- | gcc/expr.c | 14 | ||||
-rw-r--r-- | gcc/java/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/java/check-init.c | 2 | ||||
-rw-r--r-- | gcc/java/decl.c | 2 | ||||
-rw-r--r-- | gcc/java/jcf-write.c | 2 | ||||
-rw-r--r-- | gcc/java/parse.y | 4 | ||||
-rw-r--r-- | gcc/tree.c | 5 | ||||
-rw-r--r-- | gcc/tree.def | 4 | ||||
-rw-r--r-- | gcc/tree.h | 4 |
12 files changed, 55 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5d2ec5..aae0db0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2001-07-31 Alexandre Petit-Bianco <apbianco@redhat.com> + + * expr.c (safe_from_p): Use WITH_CLEANUP_EXPR_RTL instead of + RTL_EXPR_RTL while handling WITH_CLEANUP_EXPR nodes. Fixed typo in + comment. + (expand_expr): Use WITH_CLEANUP_EXPR_RTL instead of RTL_EXPR_RTL + while handling WITH_CLEANUP_EXPR node. Use second operand calling + expand_decl_cleanup. + * tree.c (firt_rtl_op): The third operand of WITH_CLEANUP_EXPR is + the first RTX. + (simple_cst_equal): WITH_CLEANUP_EXPR node to use its second + operand while calling simple_cst_equal. + * tree.def (WITH_CLEANUP_EXPR): Switched operands: the second + operand is the cleanup expression, the third is the RTL_EXPR. + * tree.h (WITH_CLEANUP_EXPR_RTL): New macro. + 2001-07-31 Jeff Sturm <jsturm@one-point.com> * except.c (duplicate_eh_regions): Test n_array[i] for NULL. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 39689e8..393da2e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-07-31 Alexandre Petit-Bianco <apbianco@redhat.com> + + * tree.c (cp_tree_equal): WITH_CLEANUP_EXPR node to use its second + operand while calling cp_tree_equal. + 2001-07-31 Nathan Sidwell <nathan@codesourcery.com> The 3.0 ABI no longer has vbase pointer fields. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 59c08bc..348942c 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1958,7 +1958,7 @@ cp_tree_equal (t1, t2) cmp = cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); if (cmp <= 0) return cmp; - return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2)); + return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1)); case COMPONENT_REF: if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1)) @@ -5858,7 +5858,7 @@ safe_from_p (x, exp, top_p) break; case WITH_CLEANUP_EXPR: - exp_rtl = RTL_EXPR_RTL (exp); + exp_rtl = WITH_CLEANUP_EXPR_RTL (exp); break; case CLEANUP_POINT_EXPR: @@ -6452,7 +6452,7 @@ expand_expr (exp, target, tmode, modifier) lineno = EXPR_WFL_LINENO (exp); if (EXPR_WFL_EMIT_LINE_NOTE (exp)) emit_line_note (input_filename, lineno); - /* Possibly avoid switching back and force here. */ + /* Possibly avoid switching back and forth here. */ to_return = expand_expr (EXPR_WFL_NODE (exp), target, tmode, modifier); input_filename = saved_input_filename; lineno = saved_lineno; @@ -7376,16 +7376,16 @@ expand_expr (exp, target, tmode, modifier) } case WITH_CLEANUP_EXPR: - if (RTL_EXPR_RTL (exp) == 0) + if (WITH_CLEANUP_EXPR_RTL (exp) == 0) { - RTL_EXPR_RTL (exp) + WITH_CLEANUP_EXPR_RTL (exp) = expand_expr (TREE_OPERAND (exp, 0), target, tmode, ro_modifier); - expand_decl_cleanup (NULL_TREE, TREE_OPERAND (exp, 2)); + expand_decl_cleanup (NULL_TREE, TREE_OPERAND (exp, 1)); /* That's it for this cleanup. */ - TREE_OPERAND (exp, 2) = 0; + TREE_OPERAND (exp, 1) = 0; } - return RTL_EXPR_RTL (exp); + return WITH_CLEANUP_EXPR_RTL (exp); case CLEANUP_POINT_EXPR: { diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index a694743..69f5705 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,16 @@ +2001-07-31 Alexandre Petit-Bianco <apbianco@redhat.com> + + * check-init.c (check_init): WITH_CLEANUP_EXPR node to use its + second operand calling check_init. + * decl.c (complete_start_java_method): Swaped second and third + arguments while creating WITH_CLEANUP_EXPR node. + * jcf-write.c (generate_bytecode_insns): Use second operand + instead of third when handling WITH_CLEANUP_EXPR. + * parse.y (java_complete_lhs): Expand second operand of + WITH_CLEANUP_EXPR nodes. + (patch_synchronized_statement): Swaped second and third arguments + while creating WITH_CLEANUP_EXPR node. + 2001-07-18 Alexandre Petit-Bianco <apbianco@redhat.com> * parse.y (create_interface): Avoid cyclic inheritance report when diff --git a/gcc/java/check-init.c b/gcc/java/check-init.c index 05e3aa3..0e340dd 100644 --- a/gcc/java/check-init.c +++ b/gcc/java/check-init.c @@ -537,7 +537,7 @@ check_init (exp, before) #endif check_init (TREE_OPERAND (exp, 0), before); UNION (alt->combined, alt->combined, before); - check_init (TREE_OPERAND (exp, 2), alt->combined); + check_init (TREE_OPERAND (exp, 1), alt->combined); return; } diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 1e8c934..3b856db 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -1738,7 +1738,7 @@ complete_start_java_method (fndecl) tree function_body = DECL_FUNCTION_BODY (fndecl); tree body = BLOCK_EXPR_BODY (function_body); lock = build (WITH_CLEANUP_EXPR, void_type_node, - enter, NULL_TREE, exit); + enter, exit, NULL_TREE); TREE_SIDE_EFFECTS (lock) = 1; lock = build (COMPOUND_EXPR, TREE_TYPE (body), lock, body); TREE_SIDE_EFFECTS (lock) = 1; diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c index 9a4eb5b..ca453c8 100644 --- a/gcc/java/jcf-write.c +++ b/gcc/java/jcf-write.c @@ -2293,7 +2293,7 @@ generate_bytecode_insns (exp, target, state) label->next = state->labeled_blocks; state->labeled_blocks = label; state->num_finalizers++; - label->u.labeled_block = TREE_OPERAND (exp, 2); + label->u.labeled_block = TREE_OPERAND (exp, 1); label->v.start_label = get_jcf_label_here (state); if (target != IGNORE_TARGET) abort (); diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 1fb08bc..05be633 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -11326,7 +11326,7 @@ java_complete_lhs (node) case WITH_CLEANUP_EXPR: COMPLETE_CHECK_OP_0 (node); - COMPLETE_CHECK_OP_2 (node); + COMPLETE_CHECK_OP_1 (node); CAN_COMPLETE_NORMALLY (node) = CAN_COMPLETE_NORMALLY (TREE_OPERAND (node, 0)); TREE_TYPE (node) = void_type_node; @@ -15326,7 +15326,7 @@ patch_synchronized_statement (node, wfl_op1) build (WITH_CLEANUP_EXPR, NULL_TREE, build (COMPOUND_EXPR, NULL_TREE, assignment, enter), - NULL_TREE, exit), + exit, NULL_TREE), block)); node = build_expr_block (node, expr_decl); @@ -1628,8 +1628,7 @@ first_rtl_op (code) case RTL_EXPR: return 0; case WITH_CLEANUP_EXPR: - /* Should be defined to be 2. */ - return 1; + return 2; case METHOD_CALL_EXPR: return 3; default: @@ -3679,7 +3678,7 @@ simple_cst_equal (t1, t2) if (cmp <= 0) return cmp; - return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2)); + return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1)); case COMPONENT_REF: if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1)) diff --git a/gcc/tree.def b/gcc/tree.def index 56bc8ef..84801e6 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -472,8 +472,8 @@ DEFTREECODE (METHOD_CALL_EXPR, "method_call_expr", 'e', 4) /* Specify a value to compute along with its corresponding cleanup. Operand 0 argument is an expression whose value needs a cleanup. - Operand 1 is an RTL_EXPR which will eventually represent that value. - Operand 2 is the cleanup expression for the object. + Operand 1 is the cleanup expression for the object. + Operand 2 is an RTL_EXPR which will eventually represent that value. The RTL_EXPR is used in this expression, which is how the expression manages to act on the proper value. The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR, if @@ -792,6 +792,10 @@ struct tree_vec #define RTL_EXPR_SEQUENCE(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[0]) #define RTL_EXPR_RTL(NODE) (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[1]) +/* In a WITH_CLEANUP_EXPR node. */ +#define WITH_CLEANUP_EXPR_RTL(NODE) \ + (*(struct rtx_def **) &EXPR_CHECK (NODE)->exp.operands[2]) + /* In a CONSTRUCTOR node. */ #define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (NODE, 1) |