diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-01-08 19:13:34 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2014-01-08 19:13:34 +0000 |
commit | 9308f0ae80f31fa8039b3d98d03f189d407d2faf (patch) | |
tree | e724e5308487cc3c44a7186746c20666dfbf912a | |
parent | fb4d390766765f32a7c0cf886003fb68179276d6 (diff) | |
download | bcm5719-llvm-9308f0ae80f31fa8039b3d98d03f189d407d2faf.tar.gz bcm5719-llvm-9308f0ae80f31fa8039b3d98d03f189d407d2faf.zip |
[Serialization] In ASTReader::getInputFile record it when we didn't find the file to avoid looking it up again.
Hopefully addresses rdar://14514222.
llvm-svn: 198781
-rw-r--r-- | clang/include/clang/Serialization/Module.h | 12 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 5 |
2 files changed, 15 insertions, 2 deletions
diff --git a/clang/include/clang/Serialization/Module.h b/clang/include/clang/Serialization/Module.h index 89c604f393e..f4c07553d6b 100644 --- a/clang/include/clang/Serialization/Module.h +++ b/clang/include/clang/Serialization/Module.h @@ -57,11 +57,12 @@ struct DeclContextInfo { /// \brief The input file that has been loaded from this AST file, along with /// bools indicating whether this was an overridden buffer or if it was -/// out-of-date. +/// out-of-date or not-found. class InputFile { enum { Overridden = 1, - OutOfDate = 2 + OutOfDate = 2, + NotFound = 3 }; llvm::PointerIntPair<const FileEntry *, 2, unsigned> Val; @@ -79,9 +80,16 @@ public: Val.setPointerAndInt(File, intVal); } + static InputFile getNotFound() { + InputFile File; + File.Val.setInt(NotFound); + return File; + } + const FileEntry *getFile() const { return Val.getPointer(); } bool isOverridden() const { return Val.getInt() == Overridden; } bool isOutOfDate() const { return Val.getInt() == OutOfDate; } + bool isNotFound() const { return Val.getInt() == NotFound; } }; /// \brief Information about a module that has been loaded by the ASTReader. diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index c531134a974..400619f63ab 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -1643,6 +1643,9 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) { if (F.InputFilesLoaded[ID-1].getFile()) return F.InputFilesLoaded[ID-1]; + if (F.InputFilesLoaded[ID-1].isNotFound()) + return InputFile(); + // Go find this input file. BitstreamCursor &Cursor = F.InputFilesCursor; SavedStreamPosition SavedPosition(Cursor); @@ -1692,6 +1695,8 @@ InputFile ASTReader::getInputFile(ModuleFile &F, unsigned ID, bool Complain) { ErrorStr += "' referenced by AST file"; Error(ErrorStr.c_str()); } + // Record that we didn't find the file. + F.InputFilesLoaded[ID-1] = InputFile::getNotFound(); return InputFile(); } |