diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-06-08 05:48:06 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-06-08 05:48:06 +0000 |
commit | 1416e17c89da90d52ac5c9d86b9006a482d377dd (patch) | |
tree | 76d66fd3bab911720f986a8e4324933503bf520d /clang/lib/Frontend/ASTUnit.cpp | |
parent | bce6d51a4b9e4ef368b5c395c267a82ea94c5749 (diff) | |
download | llvm-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.cpp | 11 |
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); |