summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-04-12 00:03:31 +0000
committerTed Kremenek <kremenek@apple.com>2012-04-12 00:03:31 +0000
commit78d5d3bb9386a5aa31d19445eb8f81bf2652acb4 (patch)
tree5bc532482d3f9dd23f983cc62120ac4256e2b9c0 /tools
parent104dbf982582f16888fb15f9342fce9748af48c5 (diff)
Implement clang_getDiagnosticCategoryText() to provide a way for a client of libclang to accurately
get the diagnostic category name from a serialized diagnostic when the version of libclang used to read the diagnostic file is newer than the clang that emitted the diagnostic file. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154567 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/c-index-test/c-index-test.c10
-rw-r--r--tools/libclang/CIndexDiagnostic.cpp11
-rw-r--r--tools/libclang/CIndexDiagnostic.h8
-rw-r--r--tools/libclang/CXLoadedDiagnostic.cpp5
-rw-r--r--tools/libclang/CXLoadedDiagnostic.h4
-rw-r--r--tools/libclang/CXStoredDiagnostic.cpp5
-rw-r--r--tools/libclang/libclang.exports3
7 files changed, 41 insertions, 5 deletions
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index a81de2717f..04e7a506e2 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -2586,9 +2586,9 @@ static void printDiagnosticSet(CXDiagnosticSet Diags, unsigned indent) {
CXSourceLocation DiagLoc;
CXDiagnostic D;
CXFile File;
- CXString FileName, DiagSpelling, DiagOption;
+ CXString FileName, DiagSpelling, DiagOption, DiagCat;
unsigned line, column, offset;
- const char *DiagOptionStr = 0;
+ const char *DiagOptionStr = 0, *DiagCatStr = 0;
D = clang_getDiagnosticInSet(Diags, i);
DiagLoc = clang_getDiagnosticLocation(D);
@@ -2611,6 +2611,12 @@ static void printDiagnosticSet(CXDiagnosticSet Diags, unsigned indent) {
fprintf(stderr, " [%s]", DiagOptionStr);
}
+ DiagCat = clang_getDiagnosticCategoryText(D);
+ DiagCatStr = clang_getCString(DiagCat);
+ if (DiagCatStr) {
+ fprintf(stderr, " [%s]", DiagCatStr);
+ }
+
fprintf(stderr, "\n");
printRanges(D, indent);
diff --git a/tools/libclang/CIndexDiagnostic.cpp b/tools/libclang/CIndexDiagnostic.cpp
index d8a2b05b20..8fbe3d8c3d 100644
--- a/tools/libclang/CIndexDiagnostic.cpp
+++ b/tools/libclang/CIndexDiagnostic.cpp
@@ -72,6 +72,8 @@ public:
}
unsigned getCategory() const { return 0; }
+ CXString getCategoryText() const { return createCXString(""); }
+
unsigned getNumRanges() const { return 0; }
CXSourceRange getRange(unsigned Range) const { return clang_getNullRange(); }
unsigned getNumFixIts() const { return 0; }
@@ -324,7 +326,7 @@ CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) {
}
if (Options & CXDiagnostic_DisplayCategoryName) {
- CXString CategoryName = clang_getDiagnosticCategoryName(CategoryID);
+ CXString CategoryName = clang_getDiagnosticCategoryText(Diagnostic);
if (NeedBracket)
Out << " [";
if (NeedComma)
@@ -385,9 +387,16 @@ unsigned clang_getDiagnosticCategory(CXDiagnostic Diag) {
}
CXString clang_getDiagnosticCategoryName(unsigned Category) {
+ // Kept for backwards compatibility.
return createCXString(DiagnosticIDs::getCategoryNameFromID(Category));
}
+CXString clang_getDiagnosticCategoryText(CXDiagnostic Diag) {
+ if (CXDiagnosticImpl *D = static_cast<CXDiagnosticImpl *>(Diag))
+ return D->getCategoryText();
+ return createCXString("");
+}
+
unsigned clang_getDiagnosticNumRanges(CXDiagnostic Diag) {
if (CXDiagnosticImpl *D = static_cast<CXDiagnosticImpl *>(Diag))
return D->getNumRanges();
diff --git a/tools/libclang/CIndexDiagnostic.h b/tools/libclang/CIndexDiagnostic.h
index 3066998237..b1c3978e0a 100644
--- a/tools/libclang/CIndexDiagnostic.h
+++ b/tools/libclang/CIndexDiagnostic.h
@@ -73,7 +73,10 @@ public:
/// \brief Return the category of the diagnostic.
virtual unsigned getCategory() const = 0;
-
+
+ /// \brief Return the category string of the diagnostic.
+ virtual CXString getCategoryText() const = 0;
+
/// \brief Return the number of source ranges for the diagnostic.
virtual unsigned getNumRanges() const = 0;
@@ -132,6 +135,9 @@ struct CXStoredDiagnostic : public CXDiagnosticImpl {
/// \brief Return the category of the diagnostic.
virtual unsigned getCategory() const;
+ /// \brief Return the category string of the diagnostic.
+ virtual CXString getCategoryText() const;
+
/// \brief Return the number of source ranges for the diagnostic.
virtual unsigned getNumRanges() const;
diff --git a/tools/libclang/CXLoadedDiagnostic.cpp b/tools/libclang/CXLoadedDiagnostic.cpp
index d52c18319f..e5b6ccc5b7 100644
--- a/tools/libclang/CXLoadedDiagnostic.cpp
+++ b/tools/libclang/CXLoadedDiagnostic.cpp
@@ -119,6 +119,10 @@ unsigned CXLoadedDiagnostic::getCategory() const {
return category;
}
+CXString CXLoadedDiagnostic::getCategoryText() const {
+ return cxstring::createCXString(CategoryText);
+}
+
unsigned CXLoadedDiagnostic::getNumRanges() const {
return Ranges.size();
}
@@ -650,6 +654,7 @@ LoadResult DiagLoader::readDiagnosticBlock(llvm::BitstreamCursor &Stream,
D->category = Record[offset++];
unsigned diagFlag = Record[offset++];
D->DiagOption = diagFlag ? TopDiags.WarningFlags[diagFlag] : "";
+ D->CategoryText = D->category ? TopDiags.Categories[D->category] : "";
D->Spelling = TopDiags.makeString(BlobStart, BlobLen);
continue;
}
diff --git a/tools/libclang/CXLoadedDiagnostic.h b/tools/libclang/CXLoadedDiagnostic.h
index 9eff144901..d4a321e0e1 100644
--- a/tools/libclang/CXLoadedDiagnostic.h
+++ b/tools/libclang/CXLoadedDiagnostic.h
@@ -43,6 +43,9 @@ public:
/// \brief Return the category of the diagnostic.
virtual unsigned getCategory() const;
+ /// \brief Return the category string of the diagnostic.
+ virtual CXString getCategoryText() const;
+
/// \brief Return the number of source ranges for the diagnostic.
virtual unsigned getNumRanges() const;
@@ -82,6 +85,7 @@ public:
std::vector<std::pair<CXSourceRange, CXString> > FixIts;
llvm::StringRef Spelling;
llvm::StringRef DiagOption;
+ llvm::StringRef CategoryText;
unsigned severity;
unsigned category;
};
diff --git a/tools/libclang/CXStoredDiagnostic.cpp b/tools/libclang/CXStoredDiagnostic.cpp
index c1bcd74387..8284dc9618 100644
--- a/tools/libclang/CXStoredDiagnostic.cpp
+++ b/tools/libclang/CXStoredDiagnostic.cpp
@@ -79,6 +79,11 @@ unsigned CXStoredDiagnostic::getCategory() const {
return DiagnosticIDs::getCategoryNumberForDiag(Diag.getID());
}
+CXString CXStoredDiagnostic::getCategoryText() const {
+ unsigned catID = DiagnosticIDs::getCategoryNumberForDiag(Diag.getID());
+ return createCXString(DiagnosticIDs::getCategoryNameFromID(catID));
+}
+
unsigned CXStoredDiagnostic::getNumRanges() const {
if (Diag.getLocation().isInvalid())
return 0;
diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
index 07bdece8eb..d3b64dbd0f 100644
--- a/tools/libclang/libclang.exports
+++ b/tools/libclang/libclang.exports
@@ -6,9 +6,9 @@ clang_CXXMethod_isStatic
clang_CXXMethod_isVirtual
clang_Cursor_getArgument
clang_Cursor_getNumArguments
+clang_Cursor_getObjCSelectorIndex
clang_Cursor_getSpellingNameRange
clang_Cursor_getTranslationUnit
-clang_Cursor_getObjCSelectorIndex
clang_Cursor_isNull
clang_IndexAction_create
clang_IndexAction_dispose
@@ -97,6 +97,7 @@ clang_getDefinitionSpellingAndExtent
clang_getDiagnostic
clang_getDiagnosticCategory
clang_getDiagnosticCategoryName
+clang_getDiagnosticCategoryText
clang_getDiagnosticFixIt
clang_getDiagnosticInSet
clang_getDiagnosticLocation