mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-05 08:40:27 +08:00
[C++ PATCH] give builtin types consistent name
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00201.html Give builtin types the correct name. * name-lookup.c (set_global_binding): Assert name is DECL_NAME. * decl.c (record_builtin_type): Reimplement, use new TYPE_DECL for rname. From-SVN: r253426
This commit is contained in:
parent
d21f2166b0
commit
e07b83663e
@ -1,3 +1,10 @@
|
||||
2017-10-04 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
Give builtin types the correct name.
|
||||
* name-lookup.c (set_global_binding): Assert name is DECL_NAME.
|
||||
* decl.c (record_builtin_type): Reimplement, use new TYPE_DECL for
|
||||
rname.
|
||||
|
||||
2017-10-04 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
Andrew Pinski <apinski@cavium.com>
|
||||
|
||||
|
@ -3895,47 +3895,47 @@ make_unbound_class_template (tree context, tree name, tree parm_list,
|
||||
/* Push the declarations of builtin types into the global namespace.
|
||||
RID_INDEX is the index of the builtin type in the array
|
||||
RID_POINTERS. NAME is the name used when looking up the builtin
|
||||
type. TYPE is the _TYPE node for the builtin type. */
|
||||
type. TYPE is the _TYPE node for the builtin type.
|
||||
|
||||
The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
|
||||
eliminated. Built-in types should not be looked up name; their
|
||||
names are keywords that the parser can recognize. However, there
|
||||
is code in c-common.c that uses identifier_global_value to look up
|
||||
built-in types by name. */
|
||||
|
||||
void
|
||||
record_builtin_type (enum rid rid_index,
|
||||
const char* name,
|
||||
tree type)
|
||||
{
|
||||
tree rname = NULL_TREE, tname = NULL_TREE;
|
||||
tree tdecl = NULL_TREE;
|
||||
tree decl = NULL_TREE;
|
||||
|
||||
if ((int) rid_index < (int) RID_MAX)
|
||||
rname = ridpointers[(int) rid_index];
|
||||
if (name)
|
||||
tname = get_identifier (name);
|
||||
|
||||
/* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
|
||||
eliminated. Built-in types should not be looked up name; their
|
||||
names are keywords that the parser can recognize. However, there
|
||||
is code in c-common.c that uses identifier_global_value to look
|
||||
up built-in types by name. */
|
||||
if (tname)
|
||||
{
|
||||
tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
|
||||
tree tname = get_identifier (name);
|
||||
tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
|
||||
DECL_ARTIFICIAL (tdecl) = 1;
|
||||
SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
|
||||
decl = tdecl;
|
||||
}
|
||||
if (rname)
|
||||
{
|
||||
if (!tdecl)
|
||||
|
||||
if ((int) rid_index < (int) RID_MAX)
|
||||
if (tree rname = ridpointers[(int) rid_index])
|
||||
if (!decl || DECL_NAME (decl) != rname)
|
||||
{
|
||||
tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
|
||||
DECL_ARTIFICIAL (tdecl) = 1;
|
||||
tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
|
||||
DECL_ARTIFICIAL (rdecl) = 1;
|
||||
SET_IDENTIFIER_GLOBAL_VALUE (rname, rdecl);
|
||||
if (!decl)
|
||||
decl = rdecl;
|
||||
}
|
||||
SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
|
||||
|
||||
if (decl)
|
||||
{
|
||||
if (!TYPE_NAME (type))
|
||||
TYPE_NAME (type) = decl;
|
||||
debug_hooks->type_decl (decl, 0);
|
||||
}
|
||||
|
||||
if (!TYPE_NAME (type))
|
||||
TYPE_NAME (type) = tdecl;
|
||||
|
||||
if (tdecl)
|
||||
debug_hooks->type_decl (tdecl, 0);
|
||||
}
|
||||
|
||||
/* Push a type into the namespace so that the back ends ignore it. */
|
||||
|
@ -4847,6 +4847,7 @@ set_global_binding (tree name, tree val)
|
||||
{
|
||||
bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
|
||||
|
||||
gcc_checking_assert (name == DECL_NAME (val));
|
||||
tree *slot = find_namespace_slot (global_namespace, name, true);
|
||||
tree old = MAYBE_STAT_DECL (*slot);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user