aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-12-09 22:28:32 +0000
committerTed Kremenek <kremenek@apple.com>2011-12-09 22:28:32 +0000
commit0373fcc3e5b205cc26656c70d7dff737b0e08345 (patch)
tree7acf261c88c2bedc525a2640b1422048a419b3a1
parent52a9b5aa5d994a22f309c62a9e0bbc070ee5eced (diff)
Add clang_getDiagnosticSetFromTU() to libclang. Fixes <rdar://problem/10553081>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146287 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang-c/Index.h9
-rw-r--r--tools/libclang/CIndexDiagnostic.cpp11
-rw-r--r--tools/libclang/libclang.exports1
3 files changed, 19 insertions, 2 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index dac8b54094..65e98ade51 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -620,6 +620,15 @@ CINDEX_LINKAGE CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit,
unsigned Index);
/**
+ * \brief Retrieve the complete set of diagnostics associated with a
+ * translation unit.
+ *
+ * \param Unit the translation unit to query.
+ */
+CINDEX_LINKAGE CXDiagnosticSet
+ clang_getDiagnosticSetFromTU(CXTranslationUnit Unit);
+
+/**
* \brief Destroy a diagnostic.
*/
CINDEX_LINKAGE void clang_disposeDiagnostic(CXDiagnostic Diagnostic);
diff --git a/tools/libclang/CIndexDiagnostic.cpp b/tools/libclang/CIndexDiagnostic.cpp
index a29e3a60e0..ceb640532b 100644
--- a/tools/libclang/CIndexDiagnostic.cpp
+++ b/tools/libclang/CIndexDiagnostic.cpp
@@ -98,15 +98,22 @@ unsigned clang_getNumDiagnostics(CXTranslationUnit Unit) {
}
CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, unsigned Index) {
- if (!Unit->TUData)
+ CXDiagnosticSet D = clang_getDiagnosticSetFromTU(Unit);
+ if (!D)
return 0;
- CXDiagnosticSetImpl *Diags = lazyCreateDiags(Unit);
+ CXDiagnosticSetImpl *Diags = static_cast<CXDiagnosticSetImpl*>(D);
if (Index >= Diags->getNumDiagnostics())
return 0;
return Diags->getDiagnostic(Index);
}
+
+CXDiagnosticSet clang_getDiagnosticSetFromTU(CXTranslationUnit Unit) {
+ if (!Unit->TUData)
+ return 0;
+ return static_cast<CXDiagnostic>(lazyCreateDiags(Unit));
+}
void clang_disposeDiagnostic(CXDiagnostic Diagnostic) {
// No-op. Kept as a legacy API. CXDiagnostics are now managed
diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
index 5d37b59662..b028bb4602 100644
--- a/tools/libclang/libclang.exports
+++ b/tools/libclang/libclang.exports
@@ -97,6 +97,7 @@ clang_getDiagnosticNumFixIts
clang_getDiagnosticNumRanges
clang_getDiagnosticOption
clang_getDiagnosticRange
+clang_getDiagnosticSetFromTU
clang_getDiagnosticSeverity
clang_getDiagnosticSpelling
clang_getElementType