From bd5ff79dd0b007489d4776ea0cb4c8cb4bed3fcd Mon Sep 17 00:00:00 2001 From: Jan Korous Date: Mon, 19 Mar 2018 20:26:18 +0000 Subject: [clangd] Fix undefined behavior due to misaligned type cast The current code was casting pointer to a misaligned type which is undefined behavior. Found by compiling with Undefined Behavior Sanitizer and running tests (check-clang-tools). llvm-svn: 327902 --- clang-tools-extra/clangd/index/Index.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clangd/index/Index.h b/clang-tools-extra/clangd/index/Index.h index 7da3a50ea47..1b752b672fc 100644 --- a/clang-tools-extra/clangd/index/Index.h +++ b/clang-tools-extra/clangd/index/Index.h @@ -61,7 +61,9 @@ private: friend llvm::hash_code hash_value(const SymbolID &ID) { // We already have a good hash, just return the first bytes. static_assert(sizeof(size_t) <= HashByteLength, "size_t longer than SHA1!"); - return *reinterpret_cast(ID.HashValue.data()); + size_t Result; + memcpy(&Result, ID.HashValue.data(), sizeof(size_t)); + return llvm::hash_code(Result); } friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const SymbolID &ID); -- cgit v1.2.3