diff options
author | Nathan Sidwell <nathan@acm.org> | 2017-10-11 16:35:18 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2017-10-11 16:35:18 +0000 |
commit | a92f67261ace8c269ae588394bf77ac017bdad3b (patch) | |
tree | 3391663508708f07e1d69dd68f414f42a8bb0a94 /gcc | |
parent | 4e7d02606ea8b0dac11887b1f759ea61d5394d86 (diff) | |
download | gcc-a92f67261ace8c269ae588394bf77ac017bdad3b.zip gcc-a92f67261ace8c269ae588394bf77ac017bdad3b.tar.gz gcc-a92f67261ace8c269ae588394bf77ac017bdad3b.tar.bz2 |
[PATCH] DECL_ASSEMBLER_NAME and friends
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00582.html
* tree.h (DECL_ASSEMBLER_NAME_SET_P): Don't check
HAS_DECL_ASSEMBLER_NAME_P.
* gimple-expr.c (gimple_decl_printable_name: Check
HAS_DECL_ASSEMBLER_NAME_P too.
* ipa-utils.h (type_in_anonymous_namespace_p): Check
DECL_ASSEMBLER_NAME_SET_P of TYPE_NAME.
(odr_type_p): No need to assert TYPE_NAME is a TYPE_DECL.
* passes.c (rest_of_decl_compilation): Check
HAS_DECL_ASSEMBLER_NAME_P too.
* recog.c (verify_changes): Likewise.
* tree-pretty-print.c (dump_decl_name): Likewise.
* tree-ssa-structalias.c (alias_get_name): Likewise. Reimplement.
c/
* c-decl.c (grokdeclarator): Check HAS_DECL_ASSEMBLER_NAME_P too.
From-SVN: r253649
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/c/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c/c-decl.c | 3 | ||||
-rw-r--r-- | gcc/gimple-expr.c | 10 | ||||
-rw-r--r-- | gcc/ipa-utils.h | 17 | ||||
-rw-r--r-- | gcc/passes.c | 4 | ||||
-rw-r--r-- | gcc/recog.c | 1 | ||||
-rw-r--r-- | gcc/tree-pretty-print.c | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 48 | ||||
-rw-r--r-- | gcc/tree.h | 3 |
10 files changed, 61 insertions, 48 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 273f561..d251832 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,18 @@ 2017-10-11 Nathan Sidwell <nathan@acm.org> + * tree.h (DECL_ASSEMBLER_NAME_SET_P): Don't check + HAS_DECL_ASSEMBLER_NAME_P. + * gimple-expr.c (gimple_decl_printable_name: Check + HAS_DECL_ASSEMBLER_NAME_P too. + * ipa-utils.h (type_in_anonymous_namespace_p): Check + DECL_ASSEMBLER_NAME_SET_P of TYPE_NAME. + (odr_type_p): No need to assert TYPE_NAME is a TYPE_DECL. + * passes.c (rest_of_decl_compilation): Check + HAS_DECL_ASSEMBLER_NAME_P too. + * recog.c (verify_changes): Likewise. + * tree-pretty-print.c (dump_decl_name): Likewise. + * tree-ssa-structalias.c (alias_get_name): Likewise. Reimplement. + * tree.h (DECL_ASSEMBLER_NAME_RAW): New. (SET_DECL_ASSEMBLER_NAME): Use it. (DECL_ASSEMBLER_NAME_SET_P): Likewise. diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 822d022..baf57c1 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,7 @@ +2017-10-11 Nathan Sidwell <nathan@acm.org> + + * c-decl.c (grokdeclarator): Check HAS_DECL_ASSEMBLER_NAME_P too. + 2017-10-10 Richard Sandiford <richard.sandiford@linaro.org> * c-parser.c (c_parser_cilk_clause_vectorlength): Use wi::to_wide when diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index 724d193..26b34ab 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -7011,7 +7011,8 @@ grokdeclarator (const struct c_declarator *declarator, /* This is the earliest point at which we might know the assembler name of a variable. Thus, if it's known before this, die horribly. */ - gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl)); + gcc_assert (!HAS_DECL_ASSEMBLER_NAME_P (decl) + || !DECL_ASSEMBLER_NAME_SET_P (decl)); if (warn_cxx_compat && VAR_P (decl) diff --git a/gcc/gimple-expr.c b/gcc/gimple-expr.c index c1771fc..324f101 100644 --- a/gcc/gimple-expr.c +++ b/gcc/gimple-expr.c @@ -337,9 +337,8 @@ gimple_decl_printable_name (tree decl, int verbosity) if (!DECL_NAME (decl)) return NULL; - if (DECL_ASSEMBLER_NAME_SET_P (decl)) + if (HAS_DECL_ASSEMBLER_NAME_P (decl) && DECL_ASSEMBLER_NAME_SET_P (decl)) { - const char *str, *mangled_str; int dmgl_opts = DMGL_NO_OPTS; if (verbosity >= 2) @@ -352,9 +351,10 @@ gimple_decl_printable_name (tree decl, int verbosity) dmgl_opts |= DMGL_PARAMS; } - mangled_str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); - str = cplus_demangle_v3 (mangled_str, dmgl_opts); - return (str) ? str : mangled_str; + const char *mangled_str + = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl)); + const char *str = cplus_demangle_v3 (mangled_str, dmgl_opts); + return str ? str : mangled_str; } return IDENTIFIER_POINTER (DECL_NAME (decl)); diff --git a/gcc/ipa-utils.h b/gcc/ipa-utils.h index f061c84..2affbd6 100644 --- a/gcc/ipa-utils.h +++ b/gcc/ipa-utils.h @@ -217,11 +217,11 @@ type_in_anonymous_namespace_p (const_tree t) { /* C++ FE uses magic <anon> as assembler names of anonymous types. verify that this match with type_in_anonymous_namespace_p. */ - gcc_checking_assert (!in_lto_p || !DECL_ASSEMBLER_NAME_SET_P (t) - || !strcmp - ("<anon>", - IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))); + gcc_checking_assert (!in_lto_p + || !DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)) + || !strcmp ("<anon>", + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))); return true; } return false; @@ -245,14 +245,13 @@ odr_type_p (const_tree t) if (type_in_anonymous_namespace_p (t)) return true; - if (TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL - && DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t))) + if (TYPE_NAME (t) && DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t))) { /* C++ FE uses magic <anon> as assembler names of anonymous types. verify that this match with type_in_anonymous_namespace_p. */ gcc_checking_assert (strcmp ("<anon>", - IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))); + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))); return true; } return false; diff --git a/gcc/passes.c b/gcc/passes.c index 2c9add8..65568e0 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -197,7 +197,9 @@ rest_of_decl_compilation (tree decl, /* Can't defer this, because it needs to happen before any later function definitions are processed. */ - if (DECL_ASSEMBLER_NAME_SET_P (decl) && DECL_REGISTER (decl)) + if (HAS_DECL_ASSEMBLER_NAME_P (decl) + && DECL_ASSEMBLER_NAME_SET_P (decl) + && DECL_REGISTER (decl)) make_decl_rtl (decl); /* Forward declarations for nested functions are not "external", diff --git a/gcc/recog.c b/gcc/recog.c index cfce029..b8e9b1b 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -408,6 +408,7 @@ verify_changes (int num) && REG_P (changes[i].old) && asm_noperands (PATTERN (object)) > 0 && REG_EXPR (changes[i].old) != NULL_TREE + && HAS_DECL_ASSEMBLER_NAME_P (REG_EXPR (changes[i].old)) && DECL_ASSEMBLER_NAME_SET_P (REG_EXPR (changes[i].old)) && DECL_REGISTER (REG_EXPR (changes[i].old))) { diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index 9a5eab5..61a28c6 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -249,8 +249,10 @@ dump_decl_name (pretty_printer *pp, tree node, dump_flags_t flags) { if (DECL_NAME (node)) { - if ((flags & TDF_ASMNAME) && DECL_ASSEMBLER_NAME_SET_P (node)) - pp_tree_identifier (pp, DECL_ASSEMBLER_NAME (node)); + if ((flags & TDF_ASMNAME) + && HAS_DECL_ASSEMBLER_NAME_P (node) + && DECL_ASSEMBLER_NAME_SET_P (node)) + pp_tree_identifier (pp, DECL_ASSEMBLER_NAME_RAW (node)); /* For DECL_NAMELESS names look for embedded uids in the names and sanitize them for TDF_NOUID. */ else if ((flags & TDF_NOUID) && DECL_NAMELESS (node)) diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 407ad37..89135ea 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -2849,41 +2849,33 @@ lookup_vi_for_tree (tree t) static const char * alias_get_name (tree decl) { - const char *res = NULL; - char *temp; - - if (!dump_file) - return "NULL"; - - if (TREE_CODE (decl) == SSA_NAME) - { - res = get_name (decl); - if (res) - temp = xasprintf ("%s_%u", res, SSA_NAME_VERSION (decl)); - else - temp = xasprintf ("_%u", SSA_NAME_VERSION (decl)); - res = ggc_strdup (temp); - free (temp); - } - else if (DECL_P (decl)) + const char *res = "NULL"; + if (dump_file) { - if (DECL_ASSEMBLER_NAME_SET_P (decl)) - res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); - else + char *temp = NULL; + if (TREE_CODE (decl) == SSA_NAME) + { + res = get_name (decl); + temp = xasprintf ("%s_%u", res ? res : "", SSA_NAME_VERSION (decl)); + } + else if (HAS_DECL_ASSEMBLER_NAME_P (decl) + && DECL_ASSEMBLER_NAME_SET_P (decl)) + res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl)); + else if (DECL_P (decl)) { res = get_name (decl); if (!res) - { - temp = xasprintf ("D.%u", DECL_UID (decl)); - res = ggc_strdup (temp); - free (temp); - } + temp = xasprintf ("D.%u", DECL_UID (decl)); + } + + if (temp) + { + res = ggc_strdup (temp); + free (temp); } } - if (res != NULL) - return res; - return "NULL"; + return res; } /* Find the variable id for tree T in the map. @@ -2734,8 +2734,7 @@ extern void decl_value_expr_insert (tree, tree); the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set yet. */ #define DECL_ASSEMBLER_NAME_SET_P(NODE) \ - (HAS_DECL_ASSEMBLER_NAME_P (NODE) \ - && DECL_ASSEMBLER_NAME_RAW (NODE) != NULL_TREE) + (DECL_ASSEMBLER_NAME_RAW (NODE) != NULL_TREE) /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \ |