[cfe-commits] r84825 - /cfe/trunk/tools/CIndex/CIndex.cpp
Ted Kremenek
kremenek at apple.com
Wed Oct 21 20:24:03 PDT 2009
Author: kremenek
Date: Wed Oct 21 22:24:01 2009
New Revision: 84825
URL: http://llvm.org/viewvc/llvm-project?rev=84825&view=rev
Log:
Add some explanatory diagnostics when clang_createTranslationUnitFromSource fails.
Modified:
cfe/trunk/tools/CIndex/CIndex.cpp
Modified: cfe/trunk/tools/CIndex/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=84825&r1=84824&r2=84825&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndex.cpp Wed Oct 21 22:24:01 2009
@@ -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 @@
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 @@
#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.
More information about the cfe-commits
mailing list