From 591cb3cfede314495011b5e0a27b8739f0bca777 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Wed, 27 Mar 2013 03:22:31 +0000 Subject: [PATCH] call.c (build_new_method_call_1): Use INDIRECT_REF_P. * call.c (build_new_method_call_1): Use INDIRECT_REF_P. * cvt.c (convert_to_void): Likewise. * error.c (dump_expr): Likewise. * mangle.c (write_expression): Likewise. * parser.c (cp_parser_template_argument): Likewise. * pt.c (convert_nontype_argument): Likewise. (tsubst_copy_and_build): Likewise. * rtti.c (build_typeid): Likewise. * semantics.c (finish_call_expr): Likewise. (finish_decltype_type): Likewise. (build_data_member_initialization): Likewise. * tree.c (is_dummy_object): Likewise. * typeck.c (decay_conversion): Likewise. (build_class_member_access_expr): Likewise. (cp_build_addr_expr_1): Likewise. (unary_complex_lvalue): Likewise. (check_return_expr): Likewise. * typeck2.c (cxx_readonly_error): Likewise. From-SVN: r197132 --- gcc/cp/ChangeLog | 21 +++++++++++++++++++++ gcc/cp/call.c | 2 +- gcc/cp/cvt.c | 2 +- gcc/cp/error.c | 4 ++-- gcc/cp/mangle.c | 2 +- gcc/cp/parser.c | 2 +- gcc/cp/pt.c | 4 ++-- gcc/cp/rtti.c | 2 +- gcc/cp/semantics.c | 6 +++--- gcc/cp/tree.c | 2 +- gcc/cp/typeck.c | 12 ++++++------ gcc/cp/typeck2.c | 2 +- 12 files changed, 41 insertions(+), 20 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3fe07d9711b..5a1cac41124 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,24 @@ +2013-03-26 Gabriel Dos Reis + + * call.c (build_new_method_call_1): Use INDIRECT_REF_P. + * cvt.c (convert_to_void): Likewise. + * error.c (dump_expr): Likewise. + * mangle.c (write_expression): Likewise. + * parser.c (cp_parser_template_argument): Likewise. + * pt.c (convert_nontype_argument): Likewise. + (tsubst_copy_and_build): Likewise. + * rtti.c (build_typeid): Likewise. + * semantics.c (finish_call_expr): Likewise. + (finish_decltype_type): Likewise. + (build_data_member_initialization): Likewise. + * tree.c (is_dummy_object): Likewise. + * typeck.c (decay_conversion): Likewise. + (build_class_member_access_expr): Likewise. + (cp_build_addr_expr_1): Likewise. + (unary_complex_lvalue): Likewise. + (check_return_expr): Likewise. + * typeck2.c (cxx_readonly_error): Likewise. + 2013-03-26 Jason Merrill PR c++/52597 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index dd19e48ed18..67d8b816ead 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -7730,7 +7730,7 @@ build_new_method_call_1 (tree instance, tree fns, vec **args, cast_to_void = true; call = TREE_OPERAND (call, 0); } - if (TREE_CODE (call) == INDIRECT_REF) + if (INDIRECT_REF_P (call)) call = TREE_OPERAND (call, 0); call = (build_min_non_dep_call_vec (call, diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 348e6082ceb..2cb858b91e0 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -916,7 +916,7 @@ convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain) exprv = TREE_OPERAND (exprv, 1); if (DECL_P (exprv) || handled_component_p (exprv) - || TREE_CODE (exprv) == INDIRECT_REF) + || INDIRECT_REF_P (exprv)) /* Expr is not being 'used' here, otherwise we whould have called mark_{rl}value_use use here, which would have in turn called mark_exp_read. Rather, we call mark_exp_read directly diff --git a/gcc/cp/error.c b/gcc/cp/error.c index bcb0274c1b6..15746504b4d 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1988,7 +1988,7 @@ dump_expr (tree t, int flags) case COMPONENT_REF: { tree ob = TREE_OPERAND (t, 0); - if (TREE_CODE (ob) == INDIRECT_REF) + if (INDIRECT_REF_P (ob)) { ob = TREE_OPERAND (ob, 0); if (TREE_CODE (ob) != PARM_DECL @@ -2243,7 +2243,7 @@ dump_expr (tree t, int flags) } else { - if (TREE_CODE (ob) == INDIRECT_REF) + if (INDIRECT_REF_P (ob)) { dump_expr (TREE_OPERAND (ob, 0), flags | TFF_EXPR_IN_PARENS); pp_cxx_arrow (cxx_pp); diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 603f7019a70..a672d4e3c23 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -2691,7 +2691,7 @@ write_expression (tree expr) write_member_name (member); } } - else if (TREE_CODE (expr) == INDIRECT_REF + else if (INDIRECT_REF_P (expr) && TREE_TYPE (TREE_OPERAND (expr, 0)) && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE) { diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 7ac90df1671..9ba0998f221 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -13274,7 +13274,7 @@ cp_parser_template_argument (cp_parser* parser) { tree probe; - if (TREE_CODE (argument) == INDIRECT_REF) + if (INDIRECT_REF_P (argument)) { gcc_assert (REFERENCE_REF_P (argument)); argument = TREE_OPERAND (argument, 0); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index bb690c5009f..393dbc9412b 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5735,7 +5735,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) shall be one of: [...] -- the address of an object or function with external linkage. */ - if (TREE_CODE (expr) == INDIRECT_REF + if (INDIRECT_REF_P (expr) && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0)))) { expr = TREE_OPERAND (expr, 0); @@ -14013,7 +14013,7 @@ tsubst_copy_and_build (tree t, if (unq != function) { tree fn = unq; - if (TREE_CODE (fn) == INDIRECT_REF) + if (INDIRECT_REF_P (fn)) fn = TREE_OPERAND (fn, 0); if (TREE_CODE (fn) == COMPONENT_REF) fn = TREE_OPERAND (fn, 1); diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 6c02c1cf0da..dd22e34197b 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -326,7 +326,7 @@ build_typeid (tree exp, tsubst_flags_t complain) /* FIXME when integrating with c_fully_fold, mark resolves_to_fixed_type_p case as a non-constant expression. */ - if (TREE_CODE (exp) == INDIRECT_REF + if (INDIRECT_REF_P (exp) && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE && TYPE_POLYMORPHIC_P (TREE_TYPE (exp)) && ! resolves_to_fixed_type_p (exp, &nonnull) diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index e8fc778dd2e..fd77725c254 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2236,7 +2236,7 @@ finish_call_expr (tree fn, vec **args, bool disallow_virtual, if (processing_template_decl && result != error_mark_node) { - if (TREE_CODE (result) == INDIRECT_REF) + if (INDIRECT_REF_P (result)) result = TREE_OPERAND (result, 0); result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args); SET_EXPR_LOCATION (result, input_location); @@ -5301,7 +5301,7 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p, if (identifier_p (expr)) expr = lookup_name (expr); - if (TREE_CODE (expr) == INDIRECT_REF) + if (INDIRECT_REF_P (expr)) /* This can happen when the expression is, e.g., "a.b". Just look at the underlying operand. */ expr = TREE_OPERAND (expr, 0); @@ -5948,7 +5948,7 @@ build_data_member_initialization (tree t, vec **vec) return true; else gcc_unreachable (); - if (TREE_CODE (member) == INDIRECT_REF) + if (INDIRECT_REF_P (member)) member = TREE_OPERAND (member, 0); if (TREE_CODE (member) == NOP_EXPR) { diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 0306db10770..4159321814a 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2879,7 +2879,7 @@ maybe_dummy_object (tree type, tree* binfop) int is_dummy_object (const_tree ob) { - if (TREE_CODE (ob) == INDIRECT_REF) + if (INDIRECT_REF_P (ob)) ob = TREE_OPERAND (ob, 0); return (TREE_CODE (ob) == NOP_EXPR && TREE_OPERAND (ob, 0) == void_zero_node); diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 8778b2cf7b9..a0caa300cac 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1918,7 +1918,7 @@ decay_conversion (tree exp, tsubst_flags_t complain) tree adr; tree ptrtype; - if (TREE_CODE (exp) == INDIRECT_REF) + if (INDIRECT_REF_P (exp)) return build_nop (build_pointer_type (TREE_TYPE (type)), TREE_OPERAND (exp, 0)); @@ -2296,7 +2296,7 @@ build_class_member_access_expr (tree object, tree member, int type_quals; tree member_type; - null_object_p = (TREE_CODE (object) == INDIRECT_REF + null_object_p = (INDIRECT_REF_P (object) && integer_zerop (TREE_OPERAND (object, 0))); /* Convert OBJECT to the type of MEMBER. */ @@ -5171,7 +5171,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) } /* Let &* cancel out to simplify resulting code. */ - if (TREE_CODE (arg) == INDIRECT_REF) + if (INDIRECT_REF_P (arg)) { /* We don't need to have `current_class_ptr' wrapped in a NON_LVALUE_EXPR node. */ @@ -5196,7 +5196,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain) && argtype != unknown_type_node && (val = get_base_address (arg)) && COMPLETE_TYPE_P (TREE_TYPE (val)) - && TREE_CODE (val) == INDIRECT_REF + && INDIRECT_REF_P (val) && TREE_CONSTANT (TREE_OPERAND (val, 0))) { tree type = build_pointer_type (argtype); @@ -5715,7 +5715,7 @@ unary_complex_lvalue (enum tree_code code, tree arg) return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ); } - if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF) + if (TREE_CODE (arg) == SAVE_EXPR && INDIRECT_REF_P (targ)) return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)), TREE_OPERAND (targ, 0), current_function_decl, NULL); } @@ -8254,7 +8254,7 @@ check_return_expr (tree retval, bool *no_warning) warn = false; /* If we are calling a function whose return type is the same of the current class reference, it is ok. */ - else if (TREE_CODE (retval) == INDIRECT_REF + else if (INDIRECT_REF_P (retval) && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR) warn = false; } diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 72dccb4f067..52bc4ec3b7f 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -111,7 +111,7 @@ cxx_readonly_error (tree arg, enum lvalue_use errstring) G_("decrement of " "constant field %qD"), arg); - else if (TREE_CODE (arg) == INDIRECT_REF + else if (INDIRECT_REF_P (arg) && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL)) -- 2.11.4.GIT