aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/decl.c
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2017-10-04 17:54:59 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2017-10-04 17:54:59 +0000
commite07b83663e961bdd8025e56e7916b72b3463b1c3 (patch)
treed5d394cf4cd8a033c411e8a75cdd6a12d39b79a7 /gcc/cp/decl.c
parentd21f2166b03cfda6b689398f7839520d66123708 (diff)
downloadgcc-e07b83663e961bdd8025e56e7916b72b3463b1c3.zip
gcc-e07b83663e961bdd8025e56e7916b72b3463b1c3.tar.gz
gcc-e07b83663e961bdd8025e56e7916b72b3463b1c3.tar.bz2
[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
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r--gcc/cp/decl.c52
1 files changed, 26 insertions, 26 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index ce45c11..99f0af2 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -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 (!TYPE_NAME (type))
- TYPE_NAME (type) = tdecl;
- if (tdecl)
- debug_hooks->type_decl (tdecl, 0);
+ if (decl)
+ {
+ 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. */