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.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index d97cf810ba..62d0ba4f9f 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -23,6 +23,7 @@
#include "clang/AST/Type.h"
#include "clang/Lex/MacroInfo.h"
#include "clang/Lex/Preprocessor.h"
+#include "clang/Lex/HeaderSearch.h"
#include "clang/Basic/OnDiskHashTable.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/SourceManagerInternals.h"
@@ -1444,6 +1445,7 @@ void PCHReader::ReadMacroRecord(uint64_t Offset) {
RecordData Record;
llvm::SmallVector<IdentifierInfo*, 16> MacroArgs;
MacroInfo *Macro = 0;
+
while (true) {
unsigned Code = Stream.ReadCode();
switch (Code) {
@@ -1536,7 +1538,9 @@ void PCHReader::ReadMacroRecord(uint64_t Offset) {
Macro->AddTokenToBody(Tok);
break;
}
- }
+ case pch::PP_HEADER_FILE_INFO:
+ break; // Already processed by ReadPreprocessorBlock().
+ }
}
}
@@ -1545,6 +1549,7 @@ bool PCHReader::ReadPreprocessorBlock() {
return Error("Malformed preprocessor block record");
RecordData Record;
+ unsigned NumHeaderInfos = 0;
while (true) {
unsigned Code = Stream.ReadCode();
switch (Code) {
@@ -1581,8 +1586,16 @@ bool PCHReader::ReadPreprocessorBlock() {
case pch::PP_MACRO_OBJECT_LIKE:
case pch::PP_MACRO_FUNCTION_LIKE:
case pch::PP_TOKEN:
- // Once we've hit a macro definition or a token, we're done.
- return false;
+ break;
+ case pch::PP_HEADER_FILE_INFO: {
+ HeaderFileInfo HFI;
+ HFI.isImport = Record[0];
+ HFI.DirInfo = Record[1];
+ HFI.NumIncludes = Record[2];
+ HFI.ControllingMacro = DecodeIdentifierInfo(Record[3]);
+ PP.getHeaderSearchInfo().setHeaderFileInfoForUID(HFI, NumHeaderInfos++);
+ break;
+ }
}
}
}