Hi,

On 01/29/2014 09:49 PM, Jason Merrill wrote:
OK, thanks.
Applied.
By the way, when I said 3/4 uses (in fact, at least 4 in the file), I meant the pattern:

        tree name = TYPE_NAME (type);
        if (TREE_CODE (name) == TYPE_DECL)
          name = DECL_NAME (name);

which I noticed yesterday. Could be a new macro? (post 4.9 maybe)

Sure. Maybe call it TYPE_IDENTIFIER, replacing the one in cp-tree.h with a conditional one in tree.h.
Interesting. If you like we can do now the below, as preparatory clean-up for the above, which I would do when 4.9 branches.

Thanks,
Paolo.

/////////////////////
2014-01-29  Paolo Carlini  <paolo.carl...@oracle.com>

        * decl.c (duplicate_decls, typename_hash, typename_compare):
        Use TYPE_IDENTIFIER.
        * error.c (dump_type): Likewise.
        * mangle.c (dump_substitution_candidates): Likewise.
Index: decl.c
===================================================================
--- decl.c      (revision 207281)
+++ decl.c      (working copy)
@@ -1381,7 +1381,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool
 
                    if (TYPE_PTR_P (t)
                        && TYPE_NAME (TREE_TYPE (t))
-                       && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
+                       && TYPE_IDENTIFIER (TREE_TYPE (t))
                           == get_identifier ("FILE")
                        && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
                      {
@@ -3213,7 +3213,7 @@ typename_hash (const void* k)
   const_tree const t = (const_tree) k;
 
   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
-         ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
+         ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
 
   return hash;
 }
@@ -3235,7 +3235,7 @@ typename_compare (const void * k1, const void * k2
   const_tree const t1 = (const_tree) k1;
   const typename_info *const t2 = (const typename_info *) k2;
 
-  return (DECL_NAME (TYPE_NAME (t1)) == t2->name
+  return (TYPE_IDENTIFIER (t1) == t2->name
          && TYPE_CONTEXT (t1) == t2->scope
          && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
          && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
Index: error.c
===================================================================
--- error.c     (revision 207281)
+++ error.c     (working copy)
@@ -512,7 +512,7 @@ dump_type (cxx_pretty_printer *pp, tree t, int fla
          pp_cxx_colon_colon (pp);
        }
       pp_cxx_ws_string (pp, "template");
-      dump_type (pp, DECL_NAME (TYPE_NAME (t)), flags);
+      dump_type (pp, TYPE_IDENTIFIER (t), flags);
       break;
 
     case TYPEOF_TYPE:
Index: mangle.c
===================================================================
--- mangle.c    (revision 207281)
+++ mangle.c    (working copy)
@@ -323,7 +323,7 @@ dump_substitution_candidates (void)
       else if (TREE_CODE (el) == TREE_LIST)
        name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (el)));
       else if (TYPE_NAME (el))
-       name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (el)));
+       name = IDENTIFIER_POINTER (TYPE_IDENTIFIER (el));
       fprintf (stderr, " S%d_ = ", i - 1);
       if (TYPE_P (el) &&
          (CP_TYPE_RESTRICT_P (el)

Reply via email to