From: Douglas Gregor Date: Sat, 25 Apr 2009 19:25:49 +0000 (+0000) Subject: Tweak the data layout for the on-disk hash table of identifiers in the PCH file so... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1986cadcb30bbffafd321d9ac9f73fc3df050e74;p=clang Tweak the data layout for the on-disk hash table of identifiers in the PCH file so that the key layout matches that of the PTH key layout git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70066 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 005436dccf..2d894774a1 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -1245,8 +1245,8 @@ public: static std::pair ReadKeyDataLength(const unsigned char*& d) { using namespace clang::io; - unsigned KeyLen = ReadUnalignedLE16(d); unsigned DataLen = ReadUnalignedLE16(d); + unsigned KeyLen = ReadUnalignedLE16(d); return std::make_pair(KeyLen, DataLen); } diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 4ac836419e..7eb398c166 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -2013,7 +2013,6 @@ public: EmitKeyDataLength(llvm::raw_ostream& Out, const IdentifierInfo* II, pch::IdentID ID) { unsigned KeyLen = strlen(II->getName()) + 1; - clang::io::Emit16(Out, KeyLen); unsigned DataLen = 4 + 4; // 4 bytes for token ID, builtin, flags // 4 bytes for the persistent ID if (II->hasMacroDefinition() && @@ -2023,7 +2022,14 @@ public: DEnd = IdentifierResolver::end(); D != DEnd; ++D) DataLen += sizeof(pch::DeclID); + + // We emit the data length before the key length, because we want + // the key length to immediately precede the actual string + // data. This is so that our identifier length + key layout + // matches that of the identifier hash table for pretokenized + // headers. clang::io::Emit16(Out, DataLen); + clang::io::Emit16(Out, KeyLen); return std::make_pair(KeyLen, DataLen); }