Index: compiler-rt/lib/fuzzer/FuzzerUtil.h =================================================================== --- compiler-rt/lib/fuzzer/FuzzerUtil.h +++ compiler-rt/lib/fuzzer/FuzzerUtil.h @@ -88,7 +88,8 @@ std::string SearchRegexCmd(const std::string &Regex); -size_t SimpleFastHash(const uint8_t *Data, size_t Size); +size_t SimpleFastHash(const void *Data, size_t Size); +void SimpleFastHash64(const void *Data, size_t Size, uint64_t *Hash); inline uint32_t Log(uint32_t X) { return 32 - Clz(X) - 1; } Index: compiler-rt/lib/fuzzer/FuzzerUtil.cpp =================================================================== --- compiler-rt/lib/fuzzer/FuzzerUtil.cpp +++ compiler-rt/lib/fuzzer/FuzzerUtil.cpp @@ -226,11 +226,21 @@ return N; } -size_t SimpleFastHash(const uint8_t *Data, size_t Size) { - size_t Res = 0; +template +static T SimpleFastHashImpl(const void *Data, size_t Size, T Initial) { + T Result = Initial; + const uint8_t *Bytes = static_cast(Data); for (size_t i = 0; i < Size; i++) - Res = Res * 11 + Data[i]; - return Res; + Result = Result * 11 + Bytes[i]; + return Result; +} + +size_t SimpleFastHash(const void *Data, size_t Size) { + return SimpleFastHashImpl(Data, Size, 0); +} + +void SimpleFastHash64(const void *Data, size_t Size, uint64_t *Hash) { + *Hash = SimpleFastHashImpl(Data, Size, *Hash); } } // namespace fuzzer