summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-11-07 17:46:15 +0000
committerDouglas Gregor <dgregor@apple.com>2012-11-07 17:46:15 +0000
commit188dbef26df3901195869ff19273323d657e995f (patch)
treebd511d7f3af88db0e1ada6ef900c9e72815459d3 /clang/lib/Serialization/ASTReader.cpp
parentb9db60fbce070a0eef80de620ac59b2a1b8869ec (diff)
downloadbcm5719-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.cpp23
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.
OpenPOWER on IntegriCloud