C++ PATCH: use identifier_p instead of naked TREE_CODE == IDENTIFIER_NODE
Richard Biener
richard.guenther@gmail.com
Fri Mar 22 09:22:00 GMT 2013
On Fri, Mar 22, 2013 at 4:50 AM, Gabriel Dos Reis <gdr@axiomatics.org> wrote:
>
> This patch introduces identified_p (t) in lieu of
>
> TREE_CODE (t) == IDENTIFIER_NODE
Generally we have macros like IDENTIFIER_P for this kind of checks.
> in the C++ front-end. identifier_p is effectively LANG_IDENTIFIER_CAST
> except that it returns a typed pointer instead of a boolean value.
Hm? So you are replacing TREE_CODE (t) == IDENTIFIER_NODE
with kind-of dynamic_cast<identifier> (t) (in C++ terms)? Then
naming it identifier_p is bad. We have is-a.h now, so please try to use
a single style of C++-style casting throughout GCC.
Thanks,
Richard.
> There is NO change in functionality. With this patch, I measured that
> bootsrapping takes slightly less time than without, and the object size
> of cc1plus decreases by more than 5K.
>
>
> Bootstrapped and texted on an x86_64-suse-linux.
> Applying to trunk. Follow up patches will exploit the typed pointer.
>
> -- Gaby
>
> 2013-03-21 Gabriel Dos Reis <gdr@integrable-solutions.net>
>
> * cp-tree.h (identifier_p): New.
> * call.c: Throughout, call identifier_p insstead of direct
> comparaison of TREE_CODE against IDENTIFIER_NODE.
> * decl.c: Likewisse.
> * decl2.c: Likewise.
> * init.c: Likewise.
> * mangle.c: Likewise.
> * name-lookup.c: Likewise.
> * parser.c: Likewise.
> * pt.c: Likewise.
> * search.c: Likewise.
> * semantics.c: Likewise.
> * tree.c: Likewise.
> * typeck.c: Likewise.
> * typeck2.c: Likewise.
>
> Index: call.c
> ===================================================================
> --- call.c (revision 196891)
> +++ call.c (working copy)
> @@ -233,7 +233,7 @@
> name = TREE_TYPE (name);
> else if (TYPE_P (name))
> /* OK */;
> - else if (TREE_CODE (name) == IDENTIFIER_NODE)
> + else if (identifier_p (name))
> {
> if ((MAYBE_CLASS_TYPE_P (basetype)
> && name == constructor_name (basetype))
> @@ -3147,7 +3147,7 @@
> : ACONCAT ((msgstr, " ", NULL)));
> location_t cloc = location_of (candidate->fn);
>
> - if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
> + if (identifier_p (candidate->fn))
> {
> cloc = loc;
> if (candidate->num_convs == 3)
> @@ -8563,8 +8563,7 @@
> - do not have the same parameter type list as any non-template
> non-member candidate. */
>
> - if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE
> - || TREE_CODE (cand2->fn) == IDENTIFIER_NODE)
> + if (identifier_p (cand1->fn) || identifier_p (cand2->fn))
> {
> for (i = 0; i < len; ++i)
> if (!same_type_p (cand1->convs[i]->type,
> @@ -8575,7 +8574,7 @@
> if (cand1->fn == cand2->fn)
> /* Two built-in candidates; arbitrarily pick one. */
> return 1;
> - else if (TREE_CODE (cand1->fn) == IDENTIFIER_NODE)
> + else if (identifier_p (cand1->fn))
> /* cand1 is built-in; prefer cand2. */
> return -1;
> else
> Index: cp-tree.h
> ===================================================================
> --- cp-tree.h (revision 196891)
> +++ cp-tree.h (working copy)
> @@ -241,6 +241,16 @@
> tree label_value;
> };
>
> +/* Return a typed pointer version of T if it designates a
> + C++ front-end identifier. */
> +inline lang_identifier*
> +identifier_p (tree t)
> +{
> + if (TREE_CODE (t) == IDENTIFIER_NODE)
> + return (lang_identifier*) t;
> + return NULL;
> +}
> +
> /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a
> keyword. C_RID_CODE (node) is then the RID_* value of the keyword,
> and C_RID_YYCODE is the token number wanted by Yacc. */
> Index: decl.c
> ===================================================================
> --- decl.c (revision 196891)
> +++ decl.c (working copy)
> @@ -3296,7 +3296,7 @@
> error ("%qD used without template parameters", name);
> return error_mark_node;
> }
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
> gcc_assert (TYPE_P (context));
>
> if (!MAYBE_CLASS_TYPE_P (context))
> @@ -3402,7 +3402,7 @@
> name = TYPE_IDENTIFIER (name);
> else if (DECL_P (name))
> name = DECL_NAME (name);
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> if (!dependent_type_p (context)
> || currently_open_class (context))
> @@ -4781,7 +4781,7 @@
> }
> else
> {
> - gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (ce->index));
> error ("name %qD used in a GNU-style designated "
> "initializer for an array", ce->index);
> }
> @@ -7413,8 +7413,7 @@
> == current_class_type);
> fns = TREE_OPERAND (fns, 1);
> }
> - gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
> - || TREE_CODE (fns) == OVERLOAD);
> + gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
> DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
>
> for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
> @@ -7772,7 +7771,7 @@
> tree decl;
> tree explicit_scope;
>
> - gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (!name || identifier_p (name));
>
> /* Compute the scope in which to place the variable, but remember
> whether or not that scope was explicitly specified by the user. */
> @@ -8509,7 +8508,7 @@
> {
> if (!identifier)
> error ("unnamed variable or field declared void");
> - else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
> + else if (identifier_p (identifier))
> {
> gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
> error ("variable or field %qE declared void", identifier);
> @@ -8778,7 +8777,7 @@
> tree fns = TREE_OPERAND (decl, 0);
>
> dname = fns;
> - if (TREE_CODE (dname) != IDENTIFIER_NODE)
> + if (!identifier_p (dname))
> {
> gcc_assert (is_overloaded_fn (dname));
> dname = DECL_NAME (get_first_fn (dname));
> @@ -8787,7 +8786,7 @@
> /* Fall through. */
>
> case IDENTIFIER_NODE:
> - if (TREE_CODE (decl) == IDENTIFIER_NODE)
> + if (identifier_p (decl))
> dname = decl;
>
> if (C_IS_RESERVED_WORD (dname))
> @@ -8852,7 +8851,7 @@
> }
>
> if (dname
> - && TREE_CODE (dname) == IDENTIFIER_NODE
> + && identifier_p (dname)
> && UDLIT_OPER_P (dname)
> && innermost_code != cdk_function)
> {
> @@ -8977,7 +8976,7 @@
> common. With no options, it is allowed. With -Wreturn-type,
> it is a warning. It is only an error with -pedantic-errors. */
> is_main = (funcdef_flag
> - && dname && TREE_CODE (dname) == IDENTIFIER_NODE
> + && dname && identifier_p (dname)
> && MAIN_NAME_P (dname)
> && ctype == NULL_TREE
> && in_namespace == NULL_TREE
> @@ -11896,7 +11895,7 @@
> tree context = NULL_TREE;
> tag_scope scope;
>
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> switch (tag_code)
> {
> @@ -12323,7 +12322,7 @@
> bool scoped_enum_p, bool *is_new)
> {
> tree prevtype = NULL_TREE;
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> if (is_new)
> *is_new = false;
> Index: decl2.c
> ===================================================================
> --- decl2.c (revision 196891)
> +++ decl2.c (working copy)
> @@ -1121,7 +1121,7 @@
> second and following arguments. Attributes like mode, format,
> cleanup and several target specific attributes aren't late
> just because they have an IDENTIFIER_NODE as first argument. */
> - if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
> + if (arg == args && identifier_p (t))
> continue;
>
> if (value_dependent_expression_p (t)
> Index: init.c
> ===================================================================
> --- init.c (revision 196891)
> +++ init.c (working copy)
> @@ -1416,7 +1416,7 @@
> }
> else
> {
> - if (TREE_CODE (name) == IDENTIFIER_NODE)
> + if (identifier_p (name))
> field = lookup_field (current_class_type, name, 1, false);
> else
> field = name;
> Index: mangle.c
> ===================================================================
> --- mangle.c (revision 196891)
> +++ mangle.c (working copy)
> @@ -1189,7 +1189,7 @@
> {
> MANGLE_TRACE_TREE ("unqualified-name", decl);
>
> - if (TREE_CODE (decl) == IDENTIFIER_NODE)
> + if (identifier_p (decl))
> {
> write_unqualified_id (decl);
> return;
> @@ -2519,7 +2519,7 @@
> static void
> write_member_name (tree member)
> {
> - if (TREE_CODE (member) == IDENTIFIER_NODE)
> + if (identifier_p (member))
> write_unqualified_id (member);
> else if (DECL_P (member))
> write_unqualified_name (member);
> @@ -2697,7 +2697,7 @@
> {
> write_expression (TREE_OPERAND (expr, 0));
> }
> - else if (TREE_CODE (expr) == IDENTIFIER_NODE)
> + else if (identifier_p (expr))
> {
> /* An operator name appearing as a dependent name needs to be
> specially marked to disambiguate between a use of the operator
> Index: name-lookup.c
> ===================================================================
> --- name-lookup.c (revision 196891)
> +++ name-lookup.c (working copy)
> @@ -1959,7 +1959,7 @@
> if (!name)
> return false;
>
> - if (TREE_CODE (name) != IDENTIFIER_NODE)
> + if (!identifier_p (name))
> return false;
>
> /* These don't have names. */
> @@ -2073,7 +2073,7 @@
> gcc_assert (function && TREE_CODE (function) == FUNCTION_DECL);
>
> name = DECL_NAME (function);
> - gcc_assert (name && TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (name && identifier_p (name));
>
> for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name);
> iter;
> @@ -2136,7 +2136,7 @@
> tree decl;
>
> gcc_assert (TREE_CODE (scope) == NAMESPACE_DECL);
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
> for (decl = current_binding_level->usings; decl; decl = DECL_CHAIN (decl))
> if (USING_DECL_SCOPE (decl) == scope && DECL_NAME (decl) == name)
> break;
> @@ -5724,7 +5724,7 @@
> || COMPLETE_TYPE_P (b->this_entity))))
> b = b->level_chain;
>
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> /* Do C++ gratuitous typedefing. */
> if (identifier_type_value_1 (name) != type)
> Index: parser.c
> ===================================================================
> --- parser.c (revision 196891)
> +++ parser.c (working copy)
> @@ -1110,7 +1110,7 @@
> case CPP_KEYWORD:
> /* Some keywords have a value that is not an IDENTIFIER_NODE.
> For example, `struct' is mapped to an INTEGER_CST. */
> - if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
> + if (!identifier_p (token->u.value))
> break;
> /* else fall through */
> case CPP_NAME:
> @@ -1259,7 +1259,7 @@
> if (qualifying_scope && TYPE_P (qualifying_scope))
> qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
>
> - gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
> + gcc_assert (identifier_p (unqualified_name)
> || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
> || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
>
> @@ -2587,7 +2587,7 @@
> {
> if (TYPE_P (type))
> error_at (location, "%qT is not a template", type);
> - else if (TREE_CODE (type) == IDENTIFIER_NODE)
> + else if (identifier_p (type))
> {
> if (tag_type != none_type)
> error_at (location, "%qE is not a class template", type);
> @@ -3193,7 +3193,7 @@
> tree id, location_t id_location)
> {
> tree result;
> - if (TREE_CODE (id) == IDENTIFIER_NODE)
> + if (identifier_p (id))
> {
> result = make_typename_type (scope, id, typename_type,
> /*complain=*/tf_none);
> @@ -5654,7 +5654,7 @@
> while (true)
> {
> if (idk == CP_ID_KIND_UNQUALIFIED
> - && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
> + && identifier_p (postfix_expression)
> && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
> /* It is not a Koenig lookup function call. */
> postfix_expression
> @@ -5741,7 +5741,7 @@
> if (idk == CP_ID_KIND_UNQUALIFIED
> || idk == CP_ID_KIND_TEMPLATE_ID)
> {
> - if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
> + if (identifier_p (postfix_expression))
> {
> if (!args->is_empty ())
> {
> @@ -11310,7 +11310,7 @@
> cp_id_kind idk;
> const char *error_msg;
>
> - if (TREE_CODE (expr) == IDENTIFIER_NODE)
> + if (identifier_p (expr))
> /* Lookup the name we got back from the id-expression. */
> expr = cp_parser_lookup_name (parser, expr,
> none_type,
> @@ -12759,7 +12759,7 @@
> }
>
> /* Build a representation of the specialization. */
> - if (TREE_CODE (templ) == IDENTIFIER_NODE)
> + if (identifier_p (templ))
> template_id = build_min_nt_loc (next_token->location,
> TEMPLATE_ID_EXPR,
> templ, arguments);
> @@ -13980,7 +13980,7 @@
> && !global_p
> && !qualified_p
> && TREE_CODE (type) == TYPE_DECL
> - && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
> + && identifier_p (DECL_NAME (type)))
> maybe_note_name_used_in_class (DECL_NAME (type), type);
> /* If it didn't work out, we don't have a TYPE. */
> if ((flags & CP_PARSER_FLAGS_OPTIONAL)
> @@ -15279,7 +15279,7 @@
> depending on what scope we are in. */
> if (qscope == error_mark_node || identifier == error_mark_node)
> ;
> - else if (TREE_CODE (identifier) != IDENTIFIER_NODE
> + else if (!identifier_p (identifier)
> && TREE_CODE (identifier) != BIT_NOT_EXPR)
> /* [namespace.udecl]
>
> @@ -16562,8 +16562,7 @@
> unqualified_name = error_mark_node;
> else if (unqualified_name
> && (qualifying_scope
> - || (TREE_CODE (unqualified_name)
> - != IDENTIFIER_NODE)))
> + || (!identifier_p (unqualified_name))))
> {
> cp_parser_error (parser, "expected unqualified-id");
> unqualified_name = error_mark_node;
> @@ -18226,7 +18225,7 @@
>
> /* Check to see that it is really the name of a class. */
> if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
> - && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
> + && identifier_p (TREE_OPERAND (decl, 0))
> && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
> /* Situations like this:
>
> @@ -21120,7 +21119,7 @@
> /* By this point, the NAME should be an ordinary identifier. If
> the id-expression was a qualified name, the qualifying scope is
> stored in PARSER->SCOPE at this point. */
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> /* Perform the lookup. */
> if (parser->scope)
> @@ -24290,7 +24289,7 @@
>
> node = token->u.value;
>
> - while (node && TREE_CODE (node) == IDENTIFIER_NODE
> + while (node && identifier_p (node)
> && (node == ridpointers [(int) RID_IN]
> || node == ridpointers [(int) RID_OUT]
> || node == ridpointers [(int) RID_INOUT]
> Index: pt.c
> ===================================================================
> --- pt.c (revision 196891)
> +++ pt.c (working copy)
> @@ -2467,7 +2467,7 @@
> {
> tree fns;
>
> - gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (declarator));
> if (ctype)
> fns = dname;
> else
> @@ -2528,8 +2528,7 @@
> return decl;
> }
> else if (ctype != NULL_TREE
> - && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
> - IDENTIFIER_NODE))
> + && (identifier_p (TREE_OPERAND (declarator, 0))))
> {
> /* Find the list of functions in ctype that have the same
> name as the declared function. */
> @@ -6955,7 +6954,7 @@
>
> gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
>
> - if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
> + if (!is_overloaded_fn (fns) && !identifier_p (fns))
> {
> error ("%q#D is not a function template", fns);
> return error_mark_node;
> @@ -7058,7 +7057,7 @@
> spec_entry elt;
> hashval_t hash;
>
> - if (TREE_CODE (d1) == IDENTIFIER_NODE)
> + if (identifier_p (d1))
> {
> tree value = innermost_non_namespace_value (d1);
> if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
> @@ -7853,7 +7852,7 @@
> || TREE_CODE (t) == TEMPLATE_PARM_INDEX
> || TREE_CODE (t) == OVERLOAD
> || BASELINK_P (t)
> - || TREE_CODE (t) == IDENTIFIER_NODE
> + || identifier_p (t)
> || TREE_CODE (t) == TRAIT_EXPR
> || TREE_CODE (t) == CONSTRUCTOR
> || CONSTANT_CLASS_P (t))
> @@ -8482,8 +8481,7 @@
> if (TREE_VALUE (t)
> && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
> && TREE_VALUE (TREE_VALUE (t))
> - && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
> - == IDENTIFIER_NODE))
> + && (identifier_p (TREE_VALUE (TREE_VALUE (t)))))
> {
> tree chain
> = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
> @@ -13480,7 +13478,7 @@
> input_location);
> if (error_msg)
> error (error_msg);
> - if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
> + if (!function_p && identifier_p (decl))
> {
> if (complain & tf_error)
> unqualified_name_lookup_error (decl);
> @@ -13907,7 +13905,7 @@
> /*done=*/false,
> /*address_p=*/false);
> }
> - else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
> + else if (koenig_p && identifier_p (function))
> {
> /* Do nothing; calling tsubst_copy_and_build on an identifier
> would incorrectly perform unqualified lookup again.
> @@ -13991,7 +13989,7 @@
> not appropriate, even if an unqualified-name was used
> to denote the function. */
> && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
> - || TREE_CODE (function) == IDENTIFIER_NODE)
> + || identifier_p (function))
> /* Only do this when substitution turns a dependent call
> into a non-dependent call. */
> && type_dependent_expression_p_push (t)
> @@ -13999,7 +13997,7 @@
> function = perform_koenig_lookup (function, call_args, false,
> tf_none);
>
> - if (TREE_CODE (function) == IDENTIFIER_NODE
> + if (identifier_p (function)
> && !any_type_dependent_arguments_p (call_args))
> {
> if (koenig_p && (complain & tf_warning_or_error))
> @@ -14049,7 +14047,7 @@
> function = unq;
> }
> }
> - if (TREE_CODE (function) == IDENTIFIER_NODE)
> + if (identifier_p (function))
> {
> if (complain & tf_error)
> unqualified_name_lookup_error (function);
> @@ -19781,8 +19779,7 @@
> return false;
>
> /* An unresolved name is always dependent. */
> - if (TREE_CODE (expression) == IDENTIFIER_NODE
> - || TREE_CODE (expression) == USING_DECL)
> + if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
> return true;
>
> /* Some expression forms are never type-dependent. */
> @@ -19887,7 +19884,7 @@
> if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
> return true;
> expression = TREE_OPERAND (expression, 1);
> - if (TREE_CODE (expression) == IDENTIFIER_NODE)
> + if (identifier_p (expression))
> return false;
> }
> /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
> @@ -19978,7 +19975,7 @@
> return NULL_TREE;
>
> case COMPONENT_REF:
> - if (TREE_CODE (TREE_OPERAND (*tp, 1)) == IDENTIFIER_NODE)
> + if (identifier_p (TREE_OPERAND (*tp, 1)))
> /* In a template, finish_class_member_access_expr creates a
> COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
> type-dependent, so that we can check access control at
> @@ -20222,8 +20219,7 @@
> || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
> return true;
> /* So are names that have not been looked up. */
> - if (TREE_CODE (tmpl) == SCOPE_REF
> - || TREE_CODE (tmpl) == IDENTIFIER_NODE)
> + if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
> return true;
> /* So are member templates of dependent classes. */
> if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
> @@ -20380,7 +20376,7 @@
> find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
> if (!decl)
> /*nop*/;
> - else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
> + else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
> && TREE_CODE (decl) == TYPE_DECL)
> {
> result = TREE_TYPE (decl);
> Index: search.c
> ===================================================================
> --- search.c (revision 196891)
> +++ search.c (working copy)
> @@ -381,7 +381,7 @@
> {
> tree field;
>
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
> || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
> @@ -1190,7 +1190,7 @@
> || xbasetype == error_mark_node)
> return NULL_TREE;
>
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
> + gcc_assert (identifier_p (name));
>
> if (TREE_CODE (xbasetype) == TREE_BINFO)
> {
> Index: semantics.c
> ===================================================================
> --- semantics.c (revision 196891)
> +++ semantics.c (working copy)
> @@ -536,7 +536,7 @@
> tree
> finish_goto_stmt (tree destination)
> {
> - if (TREE_CODE (destination) == IDENTIFIER_NODE)
> + if (identifier_p (destination))
> destination = lookup_label (destination);
>
> /* We warn about unused labels with -Wunused. That means we have to
> @@ -1999,7 +1999,7 @@
> }
>
> /* Find the name of the overloaded function. */
> - if (TREE_CODE (fn) == IDENTIFIER_NODE)
> + if (identifier_p (fn))
> identifier = fn;
> else if (is_overloaded_fn (fn))
> {
> @@ -2966,7 +2966,7 @@
> if (scope
> && (!TYPE_P (scope)
> || (!dependent_type_p (scope)
> - && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
> + && !(identifier_p (id_expression)
> && IDENTIFIER_TYPENAME_P (id_expression)
> && dependent_type_p (TREE_TYPE (id_expression))))))
> {
> @@ -2995,8 +2995,7 @@
> the current class so that we can check later to see if
> the meaning would have been different after the class
> was entirely defined. */
> - if (!scope && decl != error_mark_node
> - && TREE_CODE (id_expression) == IDENTIFIER_NODE)
> + if (!scope && decl != error_mark_node && identifier_p (id_expression))
> maybe_note_name_used_in_class (id_expression, decl);
>
> /* Disallow uses of local variables from containing functions, except
> @@ -3169,8 +3168,7 @@
> /* A template-id where the name of the template was not resolved
> is definitely dependent. */
> else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
> - && (TREE_CODE (TREE_OPERAND (decl, 0))
> - == IDENTIFIER_NODE))
> + && (identifier_p (TREE_OPERAND (decl, 0))))
> dependent_p = true;
> /* For anything except an overloaded function, just check its
> type. */
> @@ -5301,7 +5299,7 @@
> [expr.ref]), decltype(e) is defined as the type of the entity
> named by e. If there is no such entity, or e names a set of
> overloaded functions, the program is ill-formed. */
> - if (TREE_CODE (expr) == IDENTIFIER_NODE)
> + if (identifier_p (expr))
> expr = lookup_name (expr);
>
> if (TREE_CODE (expr) == INDIRECT_REF)
> Index: tree.c
> ===================================================================
> --- tree.c (revision 196891)
> +++ tree.c (working copy)
> @@ -1734,7 +1734,7 @@
> tree
> dependent_name (tree x)
> {
> - if (TREE_CODE (x) == IDENTIFIER_NODE)
> + if (identifier_p (x))
> return x;
> if (TREE_CODE (x) != COMPONENT_REF
> && TREE_CODE (x) != OFFSET_REF
> Index: typeck.c
> ===================================================================
> --- typeck.c (revision 196891)
> +++ typeck.c (working copy)
> @@ -2467,7 +2467,7 @@
> scope, dtor_type);
> return error_mark_node;
> }
> - if (TREE_CODE (dtor_type) == IDENTIFIER_NODE)
> + if (identifier_p (dtor_type))
> {
> /* In a template, names we can't find a match for are still accepted
> destructor names, and we check them here. */
> @@ -2588,7 +2588,7 @@
> dependent_type_p (object_type)
> /* If NAME is just an IDENTIFIER_NODE, then the expression
> is dependent. */
> - || TREE_CODE (object) == IDENTIFIER_NODE
> + || identifier_p (object)
> /* If NAME is "f<args>", where either 'f' or 'args' is
> dependent, then the expression is dependent. */
> || (TREE_CODE (name) == TEMPLATE_ID_EXPR
> @@ -2604,7 +2604,7 @@
> object = build_non_dependent_expr (object);
> }
> else if (c_dialect_objc ()
> - && TREE_CODE (name) == IDENTIFIER_NODE
> + && identifier_p (name)
> && (expr = objc_maybe_build_component_ref (object, name)))
> return expr;
>
> @@ -2671,8 +2671,7 @@
> }
>
> gcc_assert (CLASS_TYPE_P (scope));
> - gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE
> - || TREE_CODE (name) == BIT_NOT_EXPR);
> + gcc_assert (identifier_p (name) || TREE_CODE (name) == BIT_NOT_EXPR);
>
> if (constructor_name_p (name, scope))
> {
> @@ -5067,8 +5066,7 @@
> arg = mark_lvalue_use (arg);
> argtype = lvalue_type (arg);
>
> - gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
> - || !IDENTIFIER_OPNAME_P (arg));
> + gcc_assert (!identifier_p (arg) || !IDENTIFIER_OPNAME_P (arg));
>
> if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
> && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
> Index: typeck2.c
> ===================================================================
> --- typeck2.c (revision 196891)
> +++ typeck2.c (working copy)
> @@ -278,8 +278,7 @@
> void **slot;
> struct pending_abstract_type *pat;
>
> - gcc_assert (!decl || DECL_P (decl)
> - || TREE_CODE (decl) == IDENTIFIER_NODE);
> + gcc_assert (!decl || DECL_P (decl) || identifier_p (decl));
>
> if (!abstract_pending_vars)
> abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
> @@ -336,7 +335,7 @@
> error ("invalid abstract return type for member function %q+#D", decl);
> else if (TREE_CODE (decl) == FUNCTION_DECL)
> error ("invalid abstract return type for function %q+#D", decl);
> - else if (TREE_CODE (decl) == IDENTIFIER_NODE)
> + else if (identifier_p (decl))
> /* Here we do not have location information. */
> error ("invalid abstract type %qT for %qE", type, decl);
> else
> @@ -1241,7 +1240,7 @@
> latter case can happen in templates where lookup has to be
> deferred. */
> gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
> - || TREE_CODE (ce->index) == IDENTIFIER_NODE);
> + || identifier_p (ce->index));
> if (ce->index != field
> && ce->index != DECL_NAME (field))
> {
> @@ -1367,7 +1366,7 @@
> {
> if (TREE_CODE (ce->index) == FIELD_DECL)
> ;
> - else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
> + else if (identifier_p (ce->index))
> {
> /* This can happen within a cast, see g++.dg/opt/cse2.C. */
> tree name = ce->index;
>
More information about the Gcc-patches
mailing list