diff --git a/parallel_hashmap/phmap.h b/parallel_hashmap/phmap.h index 43bd6a6..a071f6e 100644 --- a/parallel_hashmap/phmap.h +++ b/parallel_hashmap/phmap.h @@ -99,7 +99,7 @@ struct Hash { inline size_t operator()(const T *val) const noexcept { - return phmap_mix_64(static_cast(val)); + return phmap_mix_64((const uintptr_t)val); } }; @@ -2547,7 +2547,7 @@ protected: bool operator==(const Inner& o) const { MutexLock_ m1(const_cast(this)); - MutexLock_ m2(const_cast(&o)); + MutexLock_ m2(const_cast(&o)); // deadlock - use std::lock return set_ == o.set_; } diff --git a/tests/flat_hash_map_test.cc b/tests/flat_hash_map_test.cc index 478bcbb..cdb11ea 100644 --- a/tests/flat_hash_map_test.cc +++ b/tests/flat_hash_map_test.cc @@ -143,6 +143,14 @@ struct Eq { } }; +TEST(THIS_TEST_NAME, PtrKet) { + using H = THIS_HASH_MAP; + H hash; + int a, b; + hash.insert(H::value_type(&a, true)); + hash.insert(H::value_type(&b, false)); +}; + TEST(THIS_TEST_NAME, LazyKeyPattern) { // hashes are only guaranteed in opt mode, we use assertions to track internal // state that can cause extra calls to hash.