aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/hash-traits.h33
2 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32cecf1..a9220e6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
+ * hash-traits.h (pointer_hash::mark_deleted, pointer_hash::mark_empty)
+ (pointer_hash::is_deleted, pointer_hash::is_empty): New functions.
+
+2015-06-25 Richard Sandiford <richard.sandiford@arm.com>
+
* hash-traits.h (ggc_hasher::remove): Take a reference parameter.
(ggc_hasher::ggc_mx): Likewise.
(ggc_cache_hasher): Inherit from ggc_hasher. Remove definitions
diff --git a/gcc/hash-traits.h b/gcc/hash-traits.h
index 1d1a220..65ed32c 100644
--- a/gcc/hash-traits.h
+++ b/gcc/hash-traits.h
@@ -66,9 +66,12 @@ struct pointer_hash : typed_noop_remove <Type>
typedef Type *compare_type;
static inline hashval_t hash (const value_type &);
-
static inline bool equal (const value_type &existing,
const compare_type &candidate);
+ static inline void mark_deleted (Type *&);
+ static inline void mark_empty (Type *&);
+ static inline bool is_deleted (Type *);
+ static inline bool is_empty (Type *);
};
template <typename Type>
@@ -88,6 +91,34 @@ pointer_hash <Type>::equal (const value_type &existing,
return existing == candidate;
}
+template <typename Type>
+inline void
+pointer_hash <Type>::mark_deleted (Type *&e)
+{
+ e = reinterpret_cast<Type *> (1);
+}
+
+template <typename Type>
+inline void
+pointer_hash <Type>::mark_empty (Type *&e)
+{
+ e = NULL;
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::is_deleted (Type *e)
+{
+ return e == reinterpret_cast<Type *> (1);
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::is_empty (Type *e)
+{
+ return e == NULL;
+}
+
/* Hasher for entry in gc memory. */
template<typename T>