aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/ASTUnit.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-06-08 05:48:06 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-06-08 05:48:06 +0000
commit1416e17c89da90d52ac5c9d86b9006a482d377dd (patch)
tree76d66fd3bab911720f986a8e4324933503bf520d /clang/lib/Frontend/ASTUnit.cpp
parentbce6d51a4b9e4ef368b5c395c267a82ea94c5749 (diff)
downloadllvm-1416e17c89da90d52ac5c9d86b9006a482d377dd.zip
llvm-1416e17c89da90d52ac5c9d86b9006a482d377dd.tar.gz
llvm-1416e17c89da90d52ac5c9d86b9006a482d377dd.tar.bz2
[libclang] Don't crash when saving a PCH from a prefix header
that does not exist. rdar://11607033 llvm-svn: 158193
Diffstat (limited to 'clang/lib/Frontend/ASTUnit.cpp')
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index d6bdae4..1ef5ba8 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -1133,7 +1133,8 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) {
StoredDiagnostics);
}
- Act->Execute();
+ if (!Act->Execute())
+ goto error;
transferASTDataFromCompilerInstance(*Clang);
@@ -1795,7 +1796,13 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocationAction(CompilerInvocation *CI,
AST->getCurrentTopLevelHashValue()));
Clang->setASTConsumer(new MultiplexConsumer(Consumers));
}
- Act->Execute();
+ if (!Act->Execute()) {
+ AST->transferASTDataFromCompilerInstance(*Clang);
+ if (OwnAST && ErrAST)
+ ErrAST->swap(OwnAST);
+
+ return 0;
+ }
// Steal the created target, context, and preprocessor.
AST->transferASTDataFromCompilerInstance(*Clang);