Symbol tables are insert only.
authorNathan Sidwell <nathan@acm.org>
Fri, 16 Jun 2017 14:54:39 +0000 (14:54 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 16 Jun 2017 14:54:39 +0000 (14:54 +0000)
* cp-tree.h (default_hash_traits <lang_identifier *>): Don't
derive from pointer_hash.  Make undeletable.

From-SVN: r249266

gcc/cp/ChangeLog
gcc/cp/cp-tree.h

index 2d7ee17689467f7f7be8f95ba9fedf9d8c038ddc..7f9ddb03df971d0e6c367eebde856531532f5bcd 100644 (file)
@@ -1,5 +1,9 @@
 2017-06-16  Nathan Sidwell  <nathan@acm.org>
 
+       Symbol tables are insert only.
+       * cp-tree.h (default_hash_traits <lang_identifier *>): Don't
+       derive from pointer_hash.  Make undeletable.
+
        * class.c (resort_type_method_vec): Avoid potential unsigned
        overflow.
 
index c56e59cbd7e84b5999707e92ff3e3b7996f642c8..6c236aee4c788677c91f11ce1560a2bdbe1f4efa 100644 (file)
@@ -550,7 +550,7 @@ identifier_p (tree t)
 
 template <>
 struct default_hash_traits <lang_identifier *>
-  : pointer_hash <tree_node>, ggc_remove <tree>
+  : pointer_hash <tree_node>
 {
   /* Use a regular tree as the type, to make using the hash table
      simpler.  We'll get dynamic type checking with the hash function
@@ -558,10 +558,14 @@ struct default_hash_traits <lang_identifier *>
   GTY((skip)) typedef tree value_type;
   GTY((skip)) typedef tree compare_type;
 
-  static hashval_t hash (const value_type &id)
+  static hashval_t hash (const value_type id)
   {
     return IDENTIFIER_HASH_VALUE (id);
   }
+
+  /* Nothing is deletable.  Everything is insertable.  */
+  static bool is_deleted (value_type) { return false; }
+  static void remove (value_type) { gcc_unreachable (); }
 };
 
 /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a