diff options
Diffstat (limited to 'clang/tools/CIndex/CIndex.cpp')
-rw-r--r-- | clang/tools/CIndex/CIndex.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp index 12c3935ca12..9259818e0ec 100644 --- a/clang/tools/CIndex/CIndex.cpp +++ b/clang/tools/CIndex/CIndex.cpp @@ -508,10 +508,20 @@ clang_createTranslationUnitFromSourceFile(CXIndex CIdx, command_line_args + num_command_line_args); void *MainAddr = (void *)(uintptr_t)clang_createTranslationUnit; - return ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(), - CXXIdx->getDiags(), "<clang>", MainAddr, - CXXIdx->getOnlyLocalDecls(), - /* UseBumpAllocator = */ true); + + unsigned NumErrors = CXXIdx->getDiags().getNumErrors(); + llvm::OwningPtr<ASTUnit> Unit( + ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(), + CXXIdx->getDiags(), "<clang>", MainAddr, + CXXIdx->getOnlyLocalDecls(), + /* UseBumpAllocator = */ true)); + + // FIXME: Until we have broader testing, just drop the entire AST if we + // encountered an error. + if (NumErrors != CXXIdx->getDiags().getNumErrors()) + return 0; + + return Unit.take(); } // Build up the arguments for invoking 'clang'. |