diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-11-07 17:46:15 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-11-07 17:46:15 +0000 |
commit | 188dbef26df3901195869ff19273323d657e995f (patch) | |
tree | bd511d7f3af88db0e1ada6ef900c9e72815459d3 /clang/lib/Serialization/ASTReader.cpp | |
parent | b9db60fbce070a0eef80de620ac59b2a1b8869ec (diff) | |
download | bcm5719-llvm-188dbef26df3901195869ff19273323d657e995f.tar.gz bcm5719-llvm-188dbef26df3901195869ff19273323d657e995f.zip |
When loading a module fails because it is out of date, rebuild that
module in place. <rdar://problem/10138913>
llvm-svn: 167539
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index fad0fe14c24..0f3e553ae27 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2675,16 +2675,21 @@ ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName, // Bump the generation number. unsigned PreviousGeneration = CurrentGeneration++; - // Load the core of the AST files. + unsigned NumModules = ModuleMgr.size(); llvm::SmallVector<ModuleFile *, 4> Loaded; - switch(ReadASTCore(FileName, Type, /*ImportedBy=*/0, Loaded, - ClientLoadCapabilities)) { - case Failure: return Failure; - case OutOfDate: return OutOfDate; - case VersionMismatch: return VersionMismatch; - case ConfigurationMismatch: return ConfigurationMismatch; - case HadErrors: return HadErrors; - case Success: break; + switch(ASTReadResult ReadResult = ReadASTCore(FileName, Type, + /*ImportedBy=*/0, Loaded, + ClientLoadCapabilities)) { + case Failure: + case OutOfDate: + case VersionMismatch: + case ConfigurationMismatch: + case HadErrors: + ModuleMgr.removeModules(ModuleMgr.begin() + NumModules, ModuleMgr.end()); + return ReadResult; + + case Success: + break; } // Here comes stuff that we only do once the entire chain is loaded. |