From patchwork Fri May 19 02:30:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 764344 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wTX9X3ncMz9ryZ for ; Fri, 19 May 2017 12:31:10 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="edWj2W4o"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; q= dns; s=default; b=BXLvEeXv87Fd+SDdY5xhNLE6tGQDhqNRPgkg8QD/0Hk5wT /wJzOGT1nGMyF1t7BLFWDE14MXCwKJbHpoVAF+QfywSv2jpNpgnXbFxbdQ82aXeF jJb8W6e9HpmwdtVkR4JFLGmZvBhZZePzjZapWPj4UtTrReBMyFTVg2hWdn5z8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; s= default; bh=7atYkDtaCD4rkk3WAN9JdbNKz2o=; b=edWj2W4oo+hC33IHs4Fk zB9XsG44ds98qo5RU0eL3nIAMDXio5GesoJSeoZGTW1xHeeJYBZJEb7ys8hBkrep rkxVvWUZadixEAGpjZVFj36CZ5OqgudDcONzRm1GMfqUKsh5TH5EpM6rw9I2voVn SzdLF4RAisDVeuyzCrAX6KY= Received: (qmail 64586 invoked by alias); 19 May 2017 02:30:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 64536 invoked by uid 89); 19 May 2017 02:30:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.2 spammy=tired X-HELO: mail-io0-f179.google.com Received: from mail-io0-f179.google.com (HELO mail-io0-f179.google.com) (209.85.223.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 19 May 2017 02:30:49 +0000 Received: by mail-io0-f179.google.com with SMTP id o12so40019606iod.3 for ; Thu, 18 May 2017 19:30:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=hF25pD6DY9OAaD6x6Z6HaTaAhEUG7TR7Kacw+nf/p/o=; b=MPHF3mdUa5tO70JuUtCbNdcd4mmBoci7Qiqu+WBbT/IGleKo5wU4PO22UzU8fMGckQ feGcvu4vrLfNc6Cy+cWKsCskVwz1+eZ+vgoCuwSmqo5wU8MeLVZ05yT30HXwLDzuM0i+ 9dFqeuk8ymFPD1mKS+gGR1RFIxp6F0eJdXZbut0HC70Z5rjdflfj9af3QyaJ/lUcqyEq 4LMcmBm9ZIIXmisCP+VoU1gVP/Z/+lD7MRnettkUo1iAFiWNWVL2Nqp9dxploXFZcA3K 6g3iSGuBc8NElEfrUnUN9XrUO48r++IU5tE0eac3p0Ca+EAJftddo4awD34GdvEQ/kJt 4tdw== X-Gm-Message-State: AODbwcABpdsUeTyB5bvTAH7is+qKp8Yugqf/erPu3UB3vhnY/8KXgkvQ SaGgLHPQmbFSA6TORGn25JbAua3vC7pVG/8= X-Received: by 10.107.40.81 with SMTP id o78mr7161283ioo.192.1495161050273; Thu, 18 May 2017 19:30:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.6.226 with HTTP; Thu, 18 May 2017 19:30:29 -0700 (PDT) From: Jason Merrill Date: Thu, 18 May 2017 22:30:29 -0400 Message-ID: Subject: RFA: PATCH to add id_strcmp helper function To: gcc-patches List X-IsSubscribed: yes I got tired of writing strcmp (IDENTIFIER_POINTER and decided to wrap it in an inline function. I decided to use "id_strcmp" instead of just overloading strcmp, but I don't feel strongly about that choice. The second patch changes all existing uses of that pattern to use the new function. OK for trunk? commit c909315aa35130b84df9304b4799801af05a4e35 Author: Jason Merrill Date: Thu May 18 15:23:27 2017 -0400 * tree.h (id_strcmp): New. commit 7811924e4048b36b3273bcd606eef78a25b52d53 Author: Jason Merrill Date: Thu May 18 16:15:51 2017 -0400 use-id-strcmp diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c index 18c5ccf..939cbe3 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_strcmp (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 bc36626..e9fbdcd 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_strcmp (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_strcmp (p->newname, oldname)) warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to " "conflict with previous rename"); diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 011b389..7af6d8b 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -2938,7 +2938,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_strcmp (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 48a91cb..2bc0993 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -824,7 +824,7 @@ grokfield (const cp_declarator *declarator, } if (IDENTIFIER_POINTER (name)[0] == '_' - && ! strcmp (IDENTIFIER_POINTER (name), "_vptr")) + && ! id_strcmp (name, "_vptr")) error ("member %qD conflicts with virtual function table field name", value); } diff --git a/gcc/cp/error.c b/gcc/cp/error.c index e8136d3..312890a 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -2151,7 +2151,7 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags) pp_cxx_dot (pp); } else if (TREE_CODE (ob) != PARM_DECL - || strcmp (IDENTIFIER_POINTER (DECL_NAME (ob)), "this")) + || id_strcmp (DECL_NAME (ob), "this")) { dump_expr (pp, ob, flags | TFF_EXPR_IN_PARENS); pp_cxx_arrow (pp); @@ -2234,7 +2234,7 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags) ob = TREE_OPERAND (ob, 0); if (TREE_CODE (ob) != PARM_DECL || (DECL_NAME (ob) - && strcmp (IDENTIFIER_POINTER (DECL_NAME (ob)), "this"))) + && id_strcmp (DECL_NAME (ob), "this"))) { dump_expr (pp, ob, flags | TFF_EXPR_IN_PARENS); if (TREE_CODE (TREE_TYPE (ob)) == REFERENCE_TYPE) diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 42290fe..4b4c6d8 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_strcmp (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 c0e6254..0e05016 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_strcmp (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_strcmp (token->u.value, "alignof")) pedwarn (token->location, OPT_Wpedantic, "ISO C++ does not allow % " "with a non-type"); @@ -20389,17 +20389,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_strcmp (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_strcmp (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_strcmp (token->u.value, "__final")) { virt_specifier = VIRT_SPEC_FINAL; } @@ -27636,7 +27636,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_strcmp (token->u.value, "__thread"); } /* Set the location for a declarator specifier and check if it is @@ -31246,7 +31246,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_strcmp (next->u.value, id) == 0 && cp_lexer_nth_token_is (lexer, 2, CPP_COLON)) { cp_lexer_consume_token (lexer); /* id */ @@ -37107,9 +37107,9 @@ 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), + && (id_strcmp (orig_reduc_id, "min") == 0 - || strcmp (IDENTIFIER_POINTER (orig_reduc_id), + || id_strcmp (orig_reduc_id, "max") == 0)))) error_at (loc, "predeclared arithmetic type %qT in " "%<#pragma omp declare reduction%>", type); @@ -38647,15 +38647,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_strcmp (token->u.value, "vectorlength")) clause_type = PRAGMA_CILK_CLAUSE_VECTORLENGTH; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "linear")) + else if (!id_strcmp (token->u.value, "linear")) clause_type = PRAGMA_CILK_CLAUSE_LINEAR; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "firstprivate")) + else if (!id_strcmp (token->u.value, "firstprivate")) clause_type = PRAGMA_CILK_CLAUSE_FIRSTPRIVATE; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "lastprivate")) + else if (!id_strcmp (token->u.value, "lastprivate")) clause_type = PRAGMA_CILK_CLAUSE_LASTPRIVATE; - else if (!strcmp (IDENTIFIER_POINTER (token->u.value), "reduction")) + else if (!id_strcmp (token->u.value, "reduction")) clause_type = PRAGMA_CILK_CLAUSE_REDUCTION; else return PRAGMA_CILK_CLAUSE_NONE; diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fa02b27..1f742ec 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2887,7 +2887,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_strcmp (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 5ff45eb..d342175 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -20621,7 +20621,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_strcmp (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 c5d8a6e..96382ef 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_strcmp (DECL_NAME (chain), field_name) == 0) return int_byte_position (chain); gcc_unreachable (); diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index aa3a236..5bce835 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_strcmp (DECL_NAME (target), "__cxa_pure_virtual"); } diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 7a7c747..5dad9f3 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_strcmp (DECL_NAME (t), "__high")) high_val = t; - else if (!strcmp (IDENTIFIER_POINTER (DECL_NAME (t)), "__low")) + else if (!id_strcmp (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 99589d4..137596b 100644 --- a/gcc/omp-simd-clone.c +++ b/gcc/omp-simd-clone.c @@ -417,7 +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)), + if (id_strcmp (DECL_ASSEMBLER_NAME (clone->decl), str) == 0) return NULL_TREE; diff --git a/gcc/read-rtl-function.c b/gcc/read-rtl-function.c index c5027971..8b92817 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_strcmp (DECL_NAME (arg), name) == 0) 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_strcmp (DECL_NAME (t), desc) == 0) return t; /* Not found? Create it. diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index 2300e98..0ba6625 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -2379,7 +2379,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)), + && id_strcmp (DECL_ASSEMBLER_NAME (orig_decl), "main") == 0) bounds = chkp_get_zero_bounds (); else if (BOUNDED_P (parm)) diff --git a/gcc/tree.c b/gcc/tree.c index 327332b..042fa4a 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -6053,7 +6053,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_strcmp (ident, attr_name) == 0) return true; } else if (ident_len == attr_len + 4) diff --git a/gcc/tree.h b/gcc/tree.h index c6e883c..0f01149 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 +/* strcmp of an identifier and a C string. */ + +inline int +id_strcmp (const_tree id, const char *str) +{ + return strcmp (IDENTIFIER_POINTER (id), str); +} + +inline int +id_strcmp (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]