From: Jason Merrill Date: Sun, 11 Jun 2017 05:29:14 +0000 (-0400) Subject: tree.h (id_equal): New. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a01f151f1e03f9b2bf4148fc3f18f114bb6806b0;p=gcc.git tree.h (id_equal): New. * tree.h (id_equal): New. * dwarf2out.c, hsa-gen.c, ipa-devirt.c, omp-expand.c, omp-simd-clone.c, read-rtl-function.c, tree-chkp.c, tree.c: Use it instead of strcmp of IDENTIFIER_POINTER. c-family/ * c-ada-spec.c, c-pragma.c: Use it. cp/ * cp-tree.h, decl2.c, mangle.c, parser.c, pt.c, semantics.c: Use it. From-SVN: r249103 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d35bd6d4fec..8ddc0ee4692 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-06-11 Jason Merrill + + * tree.h (id_equal): New. + * dwarf2out.c, hsa-gen.c, ipa-devirt.c, omp-expand.c, + omp-simd-clone.c, read-rtl-function.c, tree-chkp.c, tree.c: Use it + instead of strcmp of IDENTIFIER_POINTER. + 2017-06-10 Jan Hubicka * ipa-inline-transform.c: Include function.h, cfg.h and basic-block.h diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 97335e89b35..7ea7781c6a5 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2017-06-11 Jason Merrill + + * c-ada-spec.c, c-pragma.c: Use id_equal. + 2017-06-04 Marek Polacek PR c/80919 diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c index 18c5ccf1054..6cf298a126a 100644 --- a/gcc/c-family/c-ada-spec.c +++ b/gcc/c-family/c-ada-spec.c @@ -1799,7 +1799,7 @@ is_char_array (tree t) tmp = TREE_TYPE (tmp); return num_dim == 1 && TREE_CODE (tmp) == INTEGER_TYPE - && !strcmp (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (tmp))), "char"); + && id_equal (DECL_NAME (TYPE_NAME (tmp)), "char"); } /* Dump in BUFFER an array type T in Ada syntax. Assume that the "type" diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c index bc366265cd4..48b02b88bb5 100644 --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -514,7 +514,7 @@ handle_pragma_redefine_extname (cpp_reader * ARG_UNUSED (dummy)) const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); name = targetm.strip_name_encoding (name); - if (strcmp (name, IDENTIFIER_POINTER (newname))) + if (!id_equal (newname, name)) warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to " "conflict with previous rename"); } @@ -587,7 +587,7 @@ maybe_apply_renaming_pragma (tree decl, tree asmname) if (DECL_NAME (decl) == p->oldname) { /* Only warn if there is a conflict. */ - if (strcmp (IDENTIFIER_POINTER (p->newname), oldname)) + if (!id_equal (p->newname, oldname)) warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to " "conflict with previous rename"); diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 14eaa983327..da085531209 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-06-11 Jason Merrill + + * cp-tree.h, decl2.c, mangle.c, parser.c, pt.c, semantics.c: Use + id_equal. + 2017-06-09 Jason Merrill Missing bits from N4268, constant evaluation for all non-type args. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 6d4d93702f8..5dd6023be16 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3015,7 +3015,7 @@ struct GTY(()) lang_decl { template function. */ #define DECL_PRETTY_FUNCTION_P(NODE) \ (DECL_NAME (NODE) \ - && !strcmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__PRETTY_FUNCTION__")) + && id_equal (DECL_NAME (NODE), "__PRETTY_FUNCTION__")) /* Nonzero if the variable was declared to be thread-local. We need a special C++ version of this test because the middle-end diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 16454375ffd..d3d90020c05 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -827,7 +827,7 @@ grokfield (const cp_declarator *declarator, } if (IDENTIFIER_POINTER (name)[0] == '_' - && ! strcmp (IDENTIFIER_POINTER (name), "_vptr")) + && id_equal (name, "_vptr")) error ("member %qD conflicts with virtual function table field name", value); } diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 42290fee675..e866675bed9 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -2900,7 +2900,7 @@ write_expression (tree expr) write_template_arg_literal (expr); else if (code == PARM_DECL && DECL_ARTIFICIAL (expr)) { - gcc_assert (!strcmp ("this", IDENTIFIER_POINTER (DECL_NAME (expr)))); + gcc_assert (id_equal (DECL_NAME (expr), "this")); write_string ("fpT"); } else if (code == PARM_DECL) diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 78f7d66f3bb..d02ad360d16 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -3201,7 +3201,7 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree id, "-std=c++11 or -std=gnu++11"); else if (cxx_dialect < cxx11 && TREE_CODE (id) == IDENTIFIER_NODE - && !strcmp (IDENTIFIER_POINTER (id), "thread_local")) + && id_equal (id, "thread_local")) inform (location, "C++11 % only available with " "-std=c++11 or -std=gnu++11"); else if (!flag_concepts && id == ridpointers[(int)RID_CONCEPT]) @@ -7823,7 +7823,7 @@ cp_parser_unary_expression (cp_parser *parser, cp_id_kind * pidk, /* ISO C++ defines alignof only with types, not with expressions. So pedwarn if alignof is used with a non- type expression. However, __alignof__ is ok. */ - if (!strcmp (IDENTIFIER_POINTER (token->u.value), "alignof")) + if (id_equal (token->u.value, "alignof")) pedwarn (token->location, OPT_Wpedantic, "ISO C++ does not allow % " "with a non-type"); @@ -20401,17 +20401,17 @@ cp_parser_virt_specifier_seq_opt (cp_parser* parser) /* See if it's a virt-specifier-qualifier. */ if (token->type != CPP_NAME) break; - if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override")) + if (id_equal (token->u.value, "override")) { maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS); virt_specifier = VIRT_SPEC_OVERRIDE; } - else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final")) + else if (id_equal (token->u.value, "final")) { maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS); virt_specifier = VIRT_SPEC_FINAL; } - else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "__final")) + else if (id_equal (token->u.value, "__final")) { virt_specifier = VIRT_SPEC_FINAL; } @@ -27648,7 +27648,7 @@ static bool token_is__thread (cp_token *token) { gcc_assert (token->keyword == RID_THREAD); - return !strcmp (IDENTIFIER_POINTER (token->u.value), "__thread"); + return id_equal (token->u.value, "__thread"); } /* Set the location for a declarator specifier and check if it is @@ -31258,7 +31258,7 @@ cp_parser_oacc_shape_clause (cp_parser *parser, omp_clause_code kind, } /* Worker num: argument and vector length: arguments. */ else if (cp_lexer_next_token_is (lexer, CPP_NAME) - && strcmp (id, IDENTIFIER_POINTER (next->u.value)) == 0 + && id_equal (next->u.value, id) && cp_lexer_nth_token_is (lexer, 2, CPP_COLON)) { cp_lexer_consume_token (lexer); /* id */ @@ -37129,10 +37129,8 @@ cp_parser_omp_declare_reduction (cp_parser *parser, cp_token *pragma_tok, else if (ARITHMETIC_TYPE_P (type) && (orig_reduc_id == NULL_TREE || (TREE_CODE (type) != COMPLEX_TYPE - && (strcmp (IDENTIFIER_POINTER (orig_reduc_id), - "min") == 0 - || strcmp (IDENTIFIER_POINTER (orig_reduc_id), - "max") == 0)))) + && (id_equal (orig_reduc_id, "min") + || id_equal (orig_reduc_id, "max"))))) error_at (loc, "predeclared arithmetic type %qT in " "%<#pragma omp declare reduction%>", type); else if (TREE_CODE (type) == FUNCTION_TYPE @@ -38669,15 +38667,15 @@ cp_parser_cilk_simd_clause_name (cp_parser *parser) clause_type = PRAGMA_CILK_CLAUSE_PRIVATE; else if (!token->u.value || token->type != CPP_NAME) return PRAGMA_CILK_CLAUSE_NONE; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "vectorlength")) + else if (id_equal (token->u.value, "vectorlength")) clause_type = PRAGMA_CILK_CLAUSE_VECTORLENGTH; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "linear")) + else if (id_equal (token->u.value, "linear")) clause_type = PRAGMA_CILK_CLAUSE_LINEAR; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "firstprivate")) + else if (id_equal (token->u.value, "firstprivate")) clause_type = PRAGMA_CILK_CLAUSE_FIRSTPRIVATE; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "lastprivate")) + else if (id_equal (token->u.value, "lastprivate")) clause_type = PRAGMA_CILK_CLAUSE_LASTPRIVATE; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "reduction")) + else if (id_equal (token->u.value, "reduction")) clause_type = PRAGMA_CILK_CLAUSE_REDUCTION; else return PRAGMA_CILK_CLAUSE_NONE; diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 4d4484f919b..8a61b74a149 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3425,7 +3425,7 @@ builtin_pack_fn_p (tree fn) || !DECL_IS_BUILTIN (fn)) return false; - if (strcmp (IDENTIFIER_POINTER (DECL_NAME (fn)), "__integer_pack") == 0) + if (id_equal (DECL_NAME (fn), "__integer_pack")) return true; return false; @@ -3503,7 +3503,7 @@ expand_builtin_pack_call (tree call, tree args, tsubst_flags_t complain, tree fn = CALL_EXPR_FN (call); - if (strcmp (IDENTIFIER_POINTER (DECL_NAME (fn)), "__integer_pack") == 0) + if (id_equal (DECL_NAME (fn), "__integer_pack")) return expand_integer_pack (call, args, complain, in_decl); return NULL_TREE; diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 94de17f6e3e..5b5ec5483d1 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2913,7 +2913,7 @@ begin_class_definition (tree t) if (ns && TREE_CODE (ns) == NAMESPACE_DECL && DECL_CONTEXT (ns) == std_node && DECL_NAME (ns) - && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal")) + && id_equal (DECL_NAME (ns), "decimal")) { const char *n = TYPE_NAME_STRING (t); if ((strcmp (n, "decimal32") == 0) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 2a27ad53aac..92444e3cd46 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -20625,7 +20625,7 @@ add_calling_convention_attribute (dw_die_ref subr_die, tree decl) targetm.dwarf_calling_convention (TREE_TYPE (decl))); if (is_fortran () - && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__")) + && id_equal (DECL_ASSEMBLER_NAME (decl), "MAIN__")) { /* DWARF 2 doesn't provide a way to identify a program's source-level entry point. DW_AT_calling_convention attributes are only meant diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c index 80298b2b2fe..85f053cbed9 100644 --- a/gcc/hsa-gen.c +++ b/gcc/hsa-gen.c @@ -3924,7 +3924,7 @@ get_hsa_kernel_dispatch_offset (const char *field_name) for (tree chain = TYPE_FIELDS (*hsa_kernel_dispatch_type); chain != NULL_TREE; chain = TREE_CHAIN (chain)) - if (strcmp (field_name, IDENTIFIER_POINTER (DECL_NAME (chain))) == 0) + if (id_equal (DECL_NAME (chain), field_name)) return int_byte_position (chain); gcc_unreachable (); diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index cee3c3d89d7..f0bc2501c27 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -2359,7 +2359,7 @@ is_cxa_pure_virtual_p (tree target) { return target && TREE_CODE (TREE_TYPE (target)) != METHOD_TYPE && DECL_NAME (target) - && !strcmp (IDENTIFIER_POINTER (DECL_NAME (target)), + && id_equal (DECL_NAME (target), "__cxa_pure_virtual"); } diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 7a7c7475d31..53d3d3f84fd 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -4366,9 +4366,9 @@ expand_cilk_for (struct omp_region *region, struct omp_for_data *fd) tree t, low_val = NULL_TREE, high_val = NULL_TREE; for (t = DECL_ARGUMENTS (child_fndecl); t; t = TREE_CHAIN (t)) { - if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__high")) + if (id_equal (DECL_NAME (t), "__high")) high_val = t; - else if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__low")) + else if (id_equal (DECL_NAME (t), "__low")) low_val = t; } gcc_assert (low_val && high_val); diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c index 99589d44664..3aa8b131565 100644 --- a/gcc/omp-simd-clone.c +++ b/gcc/omp-simd-clone.c @@ -417,8 +417,7 @@ simd_clone_mangle (struct cgraph_node *node, if the simdlen is assumed to be 8 for the first one, etc. */ for (struct cgraph_node *clone = node->simd_clones; clone; clone = clone->simdclone->next_clone) - if (strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (clone->decl)), - str) == 0) + if (id_equal (DECL_ASSEMBLER_NAME (clone->decl), str)) return NULL_TREE; return get_identifier (str); diff --git a/gcc/read-rtl-function.c b/gcc/read-rtl-function.c index c5027971954..ec25051e702 100644 --- a/gcc/read-rtl-function.c +++ b/gcc/read-rtl-function.c @@ -536,7 +536,7 @@ static tree find_param_by_name (tree fndecl, const char *name) { for (tree arg = DECL_ARGUMENTS (fndecl); arg; arg = TREE_CHAIN (arg)) - if (strcmp (name, IDENTIFIER_POINTER (DECL_NAME (arg))) == 0) + if (id_equal (DECL_NAME (arg), name)) return arg; return NULL_TREE; } @@ -1324,7 +1324,7 @@ function_reader::parse_mem_expr (const char *desc) int i; tree t; FOR_EACH_VEC_ELT (m_fake_scope, i, t) - if (strcmp (desc, IDENTIFIER_POINTER (DECL_NAME (t))) == 0) + if (id_equal (DECL_NAME (t), desc)) return t; /* Not found? Create it. diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index 3464343682d..ecac901d52b 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -2430,8 +2430,7 @@ chkp_get_bound_for_parm (tree parm) to use zero bounds for input arguments of main function. */ else if (flag_chkp_zero_input_bounds_for_main - && strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (orig_decl)), - "main") == 0) + && id_equal (DECL_ASSEMBLER_NAME (orig_decl), "main")) bounds = chkp_get_zero_bounds (); else if (BOUNDED_P (parm)) { diff --git a/gcc/tree.c b/gcc/tree.c index 3ba11be3261..260280317bc 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -6050,7 +6050,7 @@ private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident if (ident_len == attr_len) { - if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0) + if (id_equal (ident, attr_name)) return true; } else if (ident_len == attr_len + 4) diff --git a/gcc/tree.h b/gcc/tree.h index 7de1a777743..bfe83f7c0a2 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -3618,6 +3618,20 @@ tree_operand_check_code (const_tree __t, enum tree_code __code, int __i, #endif +/* True iff an identifier matches a C string. */ + +inline bool +id_equal (const_tree id, const char *str) +{ + return !strcmp (IDENTIFIER_POINTER (id), str); +} + +inline bool +id_equal (const char *str, const_tree id) +{ + return !strcmp (str, IDENTIFIER_POINTER (id)); +} + #define error_mark_node global_trees[TI_ERROR_MARK] #define intQI_type_node global_trees[TI_INTQI_TYPE]