[cfe-commits] r145557 - in /cfe/trunk/tools: c-index-test/c-index-test.c libclang/CIndexDiagnostic.cpp libclang/CIndexDiagnostic.h libclang/Indexing.cpp libclang/IndexingContext.h
Argyrios Kyrtzidis
akyrtzi at gmail.com
Wed Nov 30 18:42:50 PST 2011
Author: akirtzidis
Date: Wed Nov 30 20:42:50 2011
New Revision: 145557
URL: http://llvm.org/viewvc/llvm-project?rev=145557&view=rev
Log:
[libclang] Create a diagnostic set to pass at the end of indexing.
Modified:
cfe/trunk/tools/c-index-test/c-index-test.c
cfe/trunk/tools/libclang/CIndexDiagnostic.cpp
cfe/trunk/tools/libclang/CIndexDiagnostic.h
cfe/trunk/tools/libclang/Indexing.cpp
cfe/trunk/tools/libclang/IndexingContext.h
Modified: cfe/trunk/tools/c-index-test/c-index-test.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=145557&r1=145556&r2=145557&view=diff
==============================================================================
--- cfe/trunk/tools/c-index-test/c-index-test.c (original)
+++ cfe/trunk/tools/c-index-test/c-index-test.c Wed Nov 30 20:42:50 2011
@@ -1702,21 +1702,27 @@
}
static void index_diagnostic(CXClientData client_data,
- CXDiagnostic diag, void *reserved) {
+ CXDiagnosticSet diagSet, void *reserved) {
CXString str;
const char *cstr;
+ unsigned numDiags, i;
+ CXDiagnostic diag;
IndexData *index_data;
index_data = (IndexData *)client_data;
printCheck(index_data);
- str = clang_formatDiagnostic(diag, clang_defaultDiagnosticDisplayOptions());
- cstr = clang_getCString(str);
- printf("[diagnostic]: %s\n", cstr);
- clang_disposeString(str);
-
- if (getenv("CINDEXTEST_FAILONERROR") &&
- clang_getDiagnosticSeverity(diag) >= CXDiagnostic_Error) {
- index_data->fail_for_error = 1;
+ numDiags = clang_getNumDiagnosticsInSet(diagSet);
+ for (i = 0; i != numDiags; ++i) {
+ diag = clang_getDiagnosticInSet(diagSet, i);
+ str = clang_formatDiagnostic(diag, clang_defaultDiagnosticDisplayOptions());
+ cstr = clang_getCString(str);
+ printf("[diagnostic]: %s\n", cstr);
+ clang_disposeString(str);
+
+ if (getenv("CINDEXTEST_FAILONERROR") &&
+ clang_getDiagnosticSeverity(diag) >= CXDiagnostic_Error) {
+ index_data->fail_for_error = 1;
+ }
}
}
Modified: cfe/trunk/tools/libclang/CIndexDiagnostic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndexDiagnostic.cpp?rev=145557&r1=145556&r2=145557&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CIndexDiagnostic.cpp (original)
+++ cfe/trunk/tools/libclang/CIndexDiagnostic.cpp Wed Nov 30 20:42:50 2011
@@ -26,6 +26,7 @@
using namespace clang;
using namespace clang::cxloc;
using namespace clang::cxstring;
+using namespace clang::cxdiag;
using namespace llvm;
@@ -39,8 +40,8 @@
CXDiagnosticImpl::~CXDiagnosticImpl() {}
-static CXDiagnosticSetImpl *lazyCreateDiags(CXTranslationUnit TU,
- bool checkIfChanged = false) {
+CXDiagnosticSetImpl *cxdiag::lazyCreateDiags(CXTranslationUnit TU,
+ bool checkIfChanged) {
ASTUnit *AU = static_cast<ASTUnit *>(TU->TUData);
if (TU->Diagnostics && checkIfChanged) {
Modified: cfe/trunk/tools/libclang/CIndexDiagnostic.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndexDiagnostic.h?rev=145557&r1=145556&r2=145557&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/CIndexDiagnostic.h (original)
+++ cfe/trunk/tools/libclang/CIndexDiagnostic.h Wed Nov 30 20:42:50 2011
@@ -149,6 +149,11 @@
}
};
+namespace cxdiag {
+CXDiagnosticSetImpl *lazyCreateDiags(CXTranslationUnit TU,
+ bool checkIfChanged = false);
+} // end namespace cxdiag
+
} // end namespace clang
#endif // LLVM_CLANG_CINDEX_DIAGNOSTIC_H
Modified: cfe/trunk/tools/libclang/Indexing.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=145557&r1=145556&r2=145557&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/Indexing.cpp (original)
+++ cfe/trunk/tools/libclang/Indexing.cpp Wed Nov 30 20:42:50 2011
@@ -12,6 +12,7 @@
#include "CXSourceLocation.h"
#include "CXTranslationUnit.h"
#include "CXString.h"
+#include "CIndexDiagnostic.h"
#include "CIndexer.h"
#include "clang/Frontend/ASTUnit.h"
@@ -31,6 +32,8 @@
using namespace cxtu;
using namespace cxindex;
+static void indexDiagnostics(CXTranslationUnit TU, IndexingContext &IdxCtx);
+
namespace {
//===----------------------------------------------------------------------===//
@@ -158,13 +161,15 @@
class IndexingFrontendAction : public ASTFrontendAction {
IndexingContext IndexCtx;
+ CXTranslationUnit CXTU;
public:
IndexingFrontendAction(CXClientData clientData,
IndexerCallbacks &indexCallbacks,
unsigned indexOptions,
CXTranslationUnit cxTU)
- : IndexCtx(clientData, indexCallbacks, indexOptions, cxTU) { }
+ : IndexCtx(clientData, indexCallbacks, indexOptions, cxTU),
+ CXTU(cxTU) { }
virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
StringRef InFile) {
@@ -174,6 +179,10 @@
return new IndexingConsumer(IndexCtx);
}
+ virtual void EndSourceFileAction() {
+ indexDiagnostics(CXTU, IndexCtx);
+ }
+
virtual TranslationUnitKind getTranslationUnitKind() { return TU_Prefix; }
virtual bool hasCodeCompletionSupport() const { return false; }
};
@@ -334,7 +343,6 @@
bool Persistent = requestedToGetTU;
StringRef ResourceFilesPath = CXXIdx->getClangResourcesPath();
bool OnlyLocalDecls = false;
- bool CaptureDiagnostics = true;
bool PrecompilePreamble = false;
bool CacheCodeCompletionResults = false;
PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts();
@@ -360,13 +368,12 @@
Persistent,
ResourceFilesPath,
OnlyLocalDecls,
- CaptureDiagnostics,
+ /*CaptureDiagnostics=*/true,
PrecompilePreamble,
CacheCodeCompletionResults);
if (!Unit)
return;
- // FIXME: Set state of the ASTUnit according to the TU_options.
if (out_TU)
*out_TU = CXTU->takeTU();
@@ -450,8 +457,11 @@
}
static void indexDiagnostics(CXTranslationUnit TU, IndexingContext &IdxCtx) {
- // FIXME: Create a CXDiagnosticSet from TU;
- // IdxCtx.handleDiagnosticSet(Set);
+ if (!IdxCtx.hasDiagnosticCallback())
+ return;
+
+ CXDiagnosticSetImpl *DiagSet = cxdiag::lazyCreateDiags(TU);
+ IdxCtx.handleDiagnosticSet(DiagSet);
}
static void clang_indexTranslationUnit_Impl(void *UserData) {
Modified: cfe/trunk/tools/libclang/IndexingContext.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/IndexingContext.h?rev=145557&r1=145556&r2=145557&view=diff
==============================================================================
--- cfe/trunk/tools/libclang/IndexingContext.h (original)
+++ cfe/trunk/tools/libclang/IndexingContext.h Wed Nov 30 20:42:50 2011
@@ -312,6 +312,8 @@
bool shouldAbort();
+ bool hasDiagnosticCallback() const { return CB.diagnostic; }
+
void enteredMainFile(const FileEntry *File);
void ppIncludedFile(SourceLocation hashLoc,
More information about the cfe-commits
mailing list