Most of ggc_cache_hasher is duplicated from ggc_hasher.  This patch
gets the same functionality via inheritance.  It also brings the
ggc_hasher functions in line with ggc_cache_hasher by making remove()
and ggc_mx() take references rather than pointers.  This seems more
consistent with the idea that elements don't need to be pointers and
could be some gc-ed structure instead.

gcc/
        * hash-traits.h (ggc_hasher::remove): Take a reference parameter.
        (ggc_hasher::ggc_mx): Likewise.
        (ggc_cache_hasher): Inherit from ggc_hasher.  Remove definitions
        that duplicate ggc_hasher ones.

Index: gcc/hash-traits.h
===================================================================
--- gcc/hash-traits.h   2015-06-16 09:48:19.893867495 +0100
+++ gcc/hash-traits.h   2015-06-16 09:48:42.361611494 +0100
@@ -96,10 +96,10 @@ struct ggc_hasher
   typedef T value_type;
   typedef T compare_type;
 
-  static void remove (T) {}
+  static void remove (T &) {}
 
   static void
-  ggc_mx (T p)
+  ggc_mx (T &p)
   {
     extern void gt_ggc_mx (T &);
     gt_ggc_mx (p);
@@ -122,30 +122,11 @@ struct ggc_hasher
 /* Hasher for cache entry in gc memory.  */
 
 template<typename T>
-struct ggc_cache_hasher
+struct ggc_cache_hasher : ggc_hasher<T>
 {
-  typedef T value_type;
-  typedef T compare_type;
-
-  static void remove (T &) {}
-
   /* Entries are weakly held because this is for caches.  */
-
   static void ggc_mx (T &) {}
 
-  static void
-  pch_nx (T &p)
-  {
-    extern void gt_pch_nx (T &);
-    gt_pch_nx (p);
-  }
-
-  static void
-  pch_nx (T &p, gt_pointer_operator op, void *cookie)
-  {
-    op (&p, cookie);
-  }
-
   static int
   keep_cache_entry (T &e)
   {

Reply via email to