diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-05-24 05:44:08 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-05-24 05:44:08 +0000 |
commit | dc9fdaf2171cc480300d5572606a8ede1678d18b (patch) | |
tree | df9549534016f49322087b6780ade57739f298ae /clang/lib/Frontend/ASTUnit.cpp | |
parent | aa7906815724171e3f81d71fb9b12fd13b845311 (diff) | |
download | bcm5719-llvm-dc9fdaf2171cc480300d5572606a8ede1678d18b.tar.gz bcm5719-llvm-dc9fdaf2171cc480300d5572606a8ede1678d18b.zip |
[modules] If we hit a failure while loading a PCH/module, abort parsing instead of trying to continue in an invalid state.
Also don't let libclang create a PCH with such an error.
Fixes rdar://13953768
llvm-svn: 182629
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 7850dc697be..2d916536d3d 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -216,7 +216,8 @@ const unsigned DefaultPreambleRebuildInterval = 5; static llvm::sys::cas_flag ActiveASTUnitObjects; ASTUnit::ASTUnit(bool _MainFileIsAST) - : Reader(0), OnlyLocalDecls(false), CaptureDiagnostics(false), + : Reader(0), HadModuleLoaderFatalFailure(false), + OnlyLocalDecls(false), CaptureDiagnostics(false), MainFileIsAST(_MainFileIsAST), TUKind(TU_Complete), WantTiming(getenv("LIBCLANG_TIMING")), OwnsRemappedFileBuffers(true), @@ -1705,6 +1706,7 @@ void ASTUnit::transferASTDataFromCompilerInstance(CompilerInstance &CI) { CI.setFileManager(0); Target = &CI.getTarget(); Reader = CI.getModuleManager(); + HadModuleLoaderFatalFailure = CI.hadModuleLoaderFatalFailure(); } StringRef ASTUnit::getMainFileName() const { @@ -2504,6 +2506,9 @@ void ASTUnit::CodeComplete(StringRef File, unsigned Line, unsigned Column, } bool ASTUnit::Save(StringRef File) { + if (HadModuleLoaderFatalFailure) + return true; + // Write to a temporary file and later rename it to the actual file, to avoid // possible race conditions. SmallString<128> TempPath; |