diff options
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index 2d894774a1..918fd93fdd 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -1282,8 +1282,7 @@ public: // the new IdentifierInfo. IdentifierInfo *II = KnownII; if (!II) - II = &Reader.getIdentifierTable().CreateIdentifierInfo( - k.first, k.first + k.second); + II = &Reader.BuildIdentifierInfoInsidePCH((const unsigned char *)k.first); Reader.SetIdentifierInfo(ID, II); // Set or check the various bits in the IdentifierInfo structure. @@ -2849,6 +2848,19 @@ 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(); |