Author: jkorous Date: Mon Mar 19 13:26:18 2018 New Revision: 327902 URL: http://llvm.org/viewvc/llvm-project?rev=327902&view=rev Log: [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). Modified: clang-tools-extra/trunk/clangd/index/Index.h Modified: clang-tools-extra/trunk/clangd/index/Index.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.h?rev=327902&r1=327901&r2=327902&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/index/Index.h (original) +++ clang-tools-extra/trunk/clangd/index/Index.h Mon Mar 19 13:26:18 2018 @@ -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<const size_t *>(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); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits