diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-10-22 03:24:01 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-10-22 03:24:01 +0000 |
commit | 379afec20ce8fd419551874daf3a1e683547575e (patch) | |
tree | 8c739c25e52d33c9dd009500ed83d42967e44d94 | |
parent | 524e465f70cc47f6bcb2d7898fd86f0a06b504f4 (diff) |
Add some explanatory diagnostics when clang_createTranslationUnitFromSource fails.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84825 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | tools/CIndex/CIndex.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp index 66db65b009..e6e63b8ef1 100644 --- a/tools/CIndex/CIndex.cpp +++ b/tools/CIndex/CIndex.cpp @@ -27,6 +27,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/System/Path.h" #include "llvm/System/Program.h" +#include "llvm/Support/raw_ostream.h" #include <cstdio> #include <vector> @@ -372,11 +373,19 @@ CXTranslationUnit clang_createTranslationUnit( std::string astName(ast_filename); std::string ErrMsg; - return ASTUnit::LoadFromPCHFile(astName, &ErrMsg, - CXXIdx->getDisplayDiagnostics() ? - NULL : new IgnoreDiagnosticsClient(), - CXXIdx->getOnlyLocalDecls(), - /* UseBumpAllocator = */ true); + CXTranslationUnit TU = + ASTUnit::LoadFromPCHFile(astName, &ErrMsg, + CXXIdx->getDisplayDiagnostics() ? + NULL : new IgnoreDiagnosticsClient(), + CXXIdx->getOnlyLocalDecls(), + /* UseBumpAllocator = */ true); + + if (CXXIdx->getDisplayDiagnostics() && !ErrMsg.empty()) { + (llvm::errs() << "clang_createTranslationUnit: " << ErrMsg + << '\n').flush(); + } + + return TU; } CXTranslationUnit clang_createTranslationUnitFromSourceFile( @@ -429,10 +438,21 @@ CXTranslationUnit clang_createTranslationUnitFromSourceFile( #ifndef LLVM_ON_WIN32 llvm::sys::Path DevNull("/dev/null"); + std::string ErrMsg; const llvm::sys::Path *Redirects[] = { &DevNull, &DevNull, &DevNull, NULL }; - llvm::sys::Program::ExecuteAndWait(ClangPath, &argv[0], NULL, - !CXXIdx->getDisplayDiagnostics() ? - &Redirects[0] : NULL); + llvm::sys::Program::ExecuteAndWait(ClangPath, &argv[0], /* env */ NULL, + /* redirects */ !CXXIdx->getDisplayDiagnostics() ? &Redirects[0] : NULL, + /* secondsToWait */ 0, /* memoryLimits */ 0, &ErrMsg); + + if (CXXIdx->getDisplayDiagnostics() && !ErrMsg.empty()) { + llvm::errs() << "clang_createTranslationUnitFromSourceFile: " << ErrMsg + << '\n' << "Arguments: \n"; + for (std::vector<const char*>::iterator I = argv.begin(), E = argv.end(); + I!=E; ++I) + if (*I) llvm::errs() << ' ' << *I << '\n'; + + (llvm::errs() << '\n').flush(); + } #else // FIXME: I don't know what is the equivalent '/dev/null' redirect for // Windows for this API. |