diff options
Diffstat (limited to 'clang/lib/Frontend')
-rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 18 | ||||
-rw-r--r-- | clang/lib/Frontend/PCHWriter.cpp | 8 |
2 files changed, 4 insertions, 22 deletions
diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index 918fd93fdd3..005436dccf2 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -1245,8 +1245,8 @@ public: static std::pair<unsigned, unsigned> ReadKeyDataLength(const unsigned char*& d) { using namespace clang::io; - unsigned DataLen = ReadUnalignedLE16(d); unsigned KeyLen = ReadUnalignedLE16(d); + unsigned DataLen = ReadUnalignedLE16(d); return std::make_pair(KeyLen, DataLen); } @@ -1282,7 +1282,8 @@ public: // the new IdentifierInfo. IdentifierInfo *II = KnownII; if (!II) - II = &Reader.BuildIdentifierInfoInsidePCH((const unsigned char *)k.first); + II = &Reader.getIdentifierTable().CreateIdentifierInfo( + k.first, k.first + k.second); Reader.SetIdentifierInfo(ID, II); // Set or check the various bits in the IdentifierInfo structure. @@ -2848,19 +2849,6 @@ IdentifierInfo *PCHReader::DecodeIdentifierInfo(unsigned ID) { return IdentifiersLoaded[ID - 1]; } -IdentifierInfo & -PCHReader::BuildIdentifierInfoInsidePCH(const unsigned char *Str) { - // Allocate the object. - std::pair<IdentifierInfo,const unsigned char*> *Mem = - Alloc.Allocate<std::pair<IdentifierInfo,const unsigned char*> >(); - - // Build the IdentifierInfo itself. - Mem->second = Str; - assert(Str[0] != '\0'); - IdentifierInfo *II = new ((void*) Mem) IdentifierInfo(); - return *II; -} - Selector PCHReader::DecodeSelector(unsigned ID) { if (ID == 0) return Selector(); diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index 7eb398c1663..4ac836419eb 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -2013,6 +2013,7 @@ 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() && @@ -2022,14 +2023,7 @@ 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); } |