[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
This commit is contained in:
parent
4e7d02606e
commit
a92f67261a
@ -1,5 +1,18 @@
|
|||||||
2017-10-11 Nathan Sidwell <nathan@acm.org>
|
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.
|
* tree.h (DECL_ASSEMBLER_NAME_RAW): New.
|
||||||
(SET_DECL_ASSEMBLER_NAME): Use it.
|
(SET_DECL_ASSEMBLER_NAME): Use it.
|
||||||
(DECL_ASSEMBLER_NAME_SET_P): Likewise.
|
(DECL_ASSEMBLER_NAME_SET_P): Likewise.
|
||||||
|
@ -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>
|
2017-10-10 Richard Sandiford <richard.sandiford@linaro.org>
|
||||||
|
|
||||||
* c-parser.c (c_parser_cilk_clause_vectorlength): Use wi::to_wide when
|
* c-parser.c (c_parser_cilk_clause_vectorlength): Use wi::to_wide when
|
||||||
|
@ -7011,7 +7011,8 @@ grokdeclarator (const struct c_declarator *declarator,
|
|||||||
|
|
||||||
/* This is the earliest point at which we might know the assembler
|
/* 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. */
|
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
|
if (warn_cxx_compat
|
||||||
&& VAR_P (decl)
|
&& VAR_P (decl)
|
||||||
|
@ -337,9 +337,8 @@ gimple_decl_printable_name (tree decl, int verbosity)
|
|||||||
if (!DECL_NAME (decl))
|
if (!DECL_NAME (decl))
|
||||||
return NULL;
|
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;
|
int dmgl_opts = DMGL_NO_OPTS;
|
||||||
|
|
||||||
if (verbosity >= 2)
|
if (verbosity >= 2)
|
||||||
@ -352,9 +351,10 @@ gimple_decl_printable_name (tree decl, int verbosity)
|
|||||||
dmgl_opts |= DMGL_PARAMS;
|
dmgl_opts |= DMGL_PARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
mangled_str = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
|
const char *mangled_str
|
||||||
str = cplus_demangle_v3 (mangled_str, dmgl_opts);
|
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl));
|
||||||
return (str) ? str : mangled_str;
|
const char *str = cplus_demangle_v3 (mangled_str, dmgl_opts);
|
||||||
|
return str ? str : mangled_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
return IDENTIFIER_POINTER (DECL_NAME (decl));
|
return IDENTIFIER_POINTER (DECL_NAME (decl));
|
||||||
|
@ -217,11 +217,11 @@ type_in_anonymous_namespace_p (const_tree t)
|
|||||||
{
|
{
|
||||||
/* C++ FE uses magic <anon> as assembler names of anonymous types.
|
/* C++ FE uses magic <anon> as assembler names of anonymous types.
|
||||||
verify that this match with type_in_anonymous_namespace_p. */
|
verify that this match with type_in_anonymous_namespace_p. */
|
||||||
gcc_checking_assert (!in_lto_p || !DECL_ASSEMBLER_NAME_SET_P (t)
|
gcc_checking_assert (!in_lto_p
|
||||||
|| !strcmp
|
|| !DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t))
|
||||||
("<anon>",
|
|| !strcmp ("<anon>",
|
||||||
IDENTIFIER_POINTER
|
IDENTIFIER_POINTER
|
||||||
(DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
|
(DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -245,14 +245,13 @@ odr_type_p (const_tree t)
|
|||||||
if (type_in_anonymous_namespace_p (t))
|
if (type_in_anonymous_namespace_p (t))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
|
if (TYPE_NAME (t) && DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)))
|
||||||
&& DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)))
|
|
||||||
{
|
{
|
||||||
/* C++ FE uses magic <anon> as assembler names of anonymous types.
|
/* C++ FE uses magic <anon> as assembler names of anonymous types.
|
||||||
verify that this match with type_in_anonymous_namespace_p. */
|
verify that this match with type_in_anonymous_namespace_p. */
|
||||||
gcc_checking_assert (strcmp ("<anon>",
|
gcc_checking_assert (strcmp ("<anon>",
|
||||||
IDENTIFIER_POINTER
|
IDENTIFIER_POINTER
|
||||||
(DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
|
(DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -197,7 +197,9 @@ rest_of_decl_compilation (tree decl,
|
|||||||
|
|
||||||
/* Can't defer this, because it needs to happen before any
|
/* Can't defer this, because it needs to happen before any
|
||||||
later function definitions are processed. */
|
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);
|
make_decl_rtl (decl);
|
||||||
|
|
||||||
/* Forward declarations for nested functions are not "external",
|
/* Forward declarations for nested functions are not "external",
|
||||||
|
@ -408,6 +408,7 @@ verify_changes (int num)
|
|||||||
&& REG_P (changes[i].old)
|
&& REG_P (changes[i].old)
|
||||||
&& asm_noperands (PATTERN (object)) > 0
|
&& asm_noperands (PATTERN (object)) > 0
|
||||||
&& REG_EXPR (changes[i].old) != NULL_TREE
|
&& 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_ASSEMBLER_NAME_SET_P (REG_EXPR (changes[i].old))
|
||||||
&& DECL_REGISTER (REG_EXPR (changes[i].old)))
|
&& DECL_REGISTER (REG_EXPR (changes[i].old)))
|
||||||
{
|
{
|
||||||
|
@ -249,8 +249,10 @@ dump_decl_name (pretty_printer *pp, tree node, dump_flags_t flags)
|
|||||||
{
|
{
|
||||||
if (DECL_NAME (node))
|
if (DECL_NAME (node))
|
||||||
{
|
{
|
||||||
if ((flags & TDF_ASMNAME) && DECL_ASSEMBLER_NAME_SET_P (node))
|
if ((flags & TDF_ASMNAME)
|
||||||
pp_tree_identifier (pp, DECL_ASSEMBLER_NAME (node));
|
&& 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
|
/* For DECL_NAMELESS names look for embedded uids in the
|
||||||
names and sanitize them for TDF_NOUID. */
|
names and sanitize them for TDF_NOUID. */
|
||||||
else if ((flags & TDF_NOUID) && DECL_NAMELESS (node))
|
else if ((flags & TDF_NOUID) && DECL_NAMELESS (node))
|
||||||
|
@ -2849,41 +2849,33 @@ lookup_vi_for_tree (tree t)
|
|||||||
static const char *
|
static const char *
|
||||||
alias_get_name (tree decl)
|
alias_get_name (tree decl)
|
||||||
{
|
{
|
||||||
const char *res = NULL;
|
const char *res = "NULL";
|
||||||
char *temp;
|
if (dump_file)
|
||||||
|
|
||||||
if (!dump_file)
|
|
||||||
return "NULL";
|
|
||||||
|
|
||||||
if (TREE_CODE (decl) == SSA_NAME)
|
|
||||||
{
|
{
|
||||||
res = get_name (decl);
|
char *temp = NULL;
|
||||||
if (res)
|
if (TREE_CODE (decl) == SSA_NAME)
|
||||||
temp = xasprintf ("%s_%u", res, SSA_NAME_VERSION (decl));
|
{
|
||||||
else
|
res = get_name (decl);
|
||||||
temp = xasprintf ("_%u", SSA_NAME_VERSION (decl));
|
temp = xasprintf ("%s_%u", res ? res : "", SSA_NAME_VERSION (decl));
|
||||||
res = ggc_strdup (temp);
|
}
|
||||||
free (temp);
|
else if (HAS_DECL_ASSEMBLER_NAME_P (decl)
|
||||||
}
|
&& DECL_ASSEMBLER_NAME_SET_P (decl))
|
||||||
else if (DECL_P (decl))
|
res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl));
|
||||||
{
|
else if (DECL_P (decl))
|
||||||
if (DECL_ASSEMBLER_NAME_SET_P (decl))
|
|
||||||
res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
res = get_name (decl);
|
res = get_name (decl);
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
temp = xasprintf ("D.%u", DECL_UID (decl));
|
||||||
temp = xasprintf ("D.%u", DECL_UID (decl));
|
}
|
||||||
res = ggc_strdup (temp);
|
|
||||||
free (temp);
|
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.
|
/* 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
|
the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
|
||||||
yet. */
|
yet. */
|
||||||
#define DECL_ASSEMBLER_NAME_SET_P(NODE) \
|
#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. */
|
/* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */
|
||||||
#define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
|
#define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
|
||||||
|
Loading…
Reference in New Issue
Block a user