aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r--lib/Frontend/PCHReader.cpp16
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();