PR 59406 note that FNV hash functions are incorrect
PR libstdc++/59406 * include/bits/functional_hash.h: Add comment noting difference from FNV-1a. * include/tr1/functional_hash.h: Likewise. * libsupc++/hash_bytes.cc: Likewise. From-SVN: r242454
This commit is contained in:
parent
3663671a13
commit
27b3b3f4e6
@ -1,5 +1,11 @@
|
||||
2016-11-15 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/59406
|
||||
* include/bits/functional_hash.h: Add comment noting difference from
|
||||
FNV-1a.
|
||||
* include/tr1/functional_hash.h: Likewise.
|
||||
* libsupc++/hash_bytes.cc: Likewise.
|
||||
|
||||
* include/bits/basic_string.h: Reuse _If_sv alias template for new
|
||||
constructor.
|
||||
|
||||
|
@ -200,6 +200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
{ return hash(&__val, sizeof(__val), __hash); }
|
||||
};
|
||||
|
||||
// A hash function similar to FNV-1a (see PR59406 for how it differs).
|
||||
struct _Fnv_hash_impl
|
||||
{
|
||||
static size_t
|
||||
|
@ -83,6 +83,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
// Fowler / Noll / Vo (FNV) Hash (type FNV-1a)
|
||||
// (Used by the next specializations of std::tr1::hash.)
|
||||
|
||||
// N.B. These functions should work on unsigned char, otherwise they do not
|
||||
// correctly implement the FNV-1a algorithm (see PR59406).
|
||||
// The existing behaviour is retained for backwards compatibility.
|
||||
|
||||
/// Dummy generic implementation (for sizeof(size_t) != 4, 8).
|
||||
template<size_t>
|
||||
struct _Fnv_hash_base
|
||||
|
@ -112,6 +112,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
}
|
||||
|
||||
// Implementation of FNV hash for 32-bit size_t.
|
||||
// N.B. This function should work on unsigned char, otherwise it does not
|
||||
// correctly implement the FNV-1a algorithm (see PR59406).
|
||||
// The existing behaviour is retained for backwards compatibility.
|
||||
size_t
|
||||
_Fnv_hash_bytes(const void* ptr, size_t len, size_t hash)
|
||||
{
|
||||
@ -157,6 +160,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
}
|
||||
|
||||
// Implementation of FNV hash for 64-bit size_t.
|
||||
// N.B. This function should work on unsigned char, otherwise it does not
|
||||
// correctly implement the FNV-1a algorithm (see PR59406).
|
||||
// The existing behaviour is retained for backwards compatibility.
|
||||
size_t
|
||||
_Fnv_hash_bytes(const void* ptr, size_t len, size_t hash)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user