Commit e07b8366 by Nathan Sidwell Committed by Nathan Sidwell

[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
parent d21f2166
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> 2017-10-04 Paolo Carlini <paolo.carlini@oracle.com>
Andrew Pinski <apinski@cavium.com> Andrew Pinski <apinski@cavium.com>
......
...@@ -3895,47 +3895,47 @@ make_unbound_class_template (tree context, tree name, tree parm_list, ...@@ -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. /* Push the declarations of builtin types into the global namespace.
RID_INDEX is the index of the builtin type in the array RID_INDEX is the index of the builtin type in the array
RID_POINTERS. NAME is the name used when looking up the builtin 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 void
record_builtin_type (enum rid rid_index, record_builtin_type (enum rid rid_index,
const char* name, const char* name,
tree type) tree type)
{ {
tree rname = NULL_TREE, tname = NULL_TREE; tree decl = NULL_TREE;
tree tdecl = NULL_TREE;
if ((int) rid_index < (int) RID_MAX)
rname = ridpointers[(int) rid_index];
if (name) 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; DECL_ARTIFICIAL (tdecl) = 1;
SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl); SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
decl = tdecl;
} }
if (rname)
{ if ((int) rid_index < (int) RID_MAX)
if (!tdecl) if (tree rname = ridpointers[(int) rid_index])
if (!decl || DECL_NAME (decl) != rname)
{ {
tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type); tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
DECL_ARTIFICIAL (tdecl) = 1; DECL_ARTIFICIAL (rdecl) = 1;
SET_IDENTIFIER_GLOBAL_VALUE (rname, rdecl);
if (!decl)
decl = rdecl;
} }
SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
}
if (!TYPE_NAME (type))
TYPE_NAME (type) = tdecl;
if (tdecl) if (decl)
debug_hooks->type_decl (tdecl, 0); {
if (!TYPE_NAME (type))
TYPE_NAME (type) = decl;
debug_hooks->type_decl (decl, 0);
}
} }
/* Push a type into the namespace so that the back ends ignore it. */ /* Push a type into the namespace so that the back ends ignore it. */
......
...@@ -4847,6 +4847,7 @@ set_global_binding (tree name, tree val) ...@@ -4847,6 +4847,7 @@ set_global_binding (tree name, tree val)
{ {
bool subtime = timevar_cond_start (TV_NAME_LOOKUP); 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 *slot = find_namespace_slot (global_namespace, name, true);
tree old = MAYBE_STAT_DECL (*slot); tree old = MAYBE_STAT_DECL (*slot);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment