summaryrefslogtreecommitdiff
path: root/tools/libclang/CIndexDiagnostic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libclang/CIndexDiagnostic.cpp')
-rw-r--r--tools/libclang/CIndexDiagnostic.cpp129
1 files changed, 73 insertions, 56 deletions
diff --git a/tools/libclang/CIndexDiagnostic.cpp b/tools/libclang/CIndexDiagnostic.cpp
index 0e9dde8d1ede..0d97ebd9335b 100644
--- a/tools/libclang/CIndexDiagnostic.cpp
+++ b/tools/libclang/CIndexDiagnostic.cpp
@@ -51,32 +51,35 @@ public:
Message(Msg), Loc(L) {}
virtual ~CXDiagnosticCustomNoteImpl() {}
-
- CXDiagnosticSeverity getSeverity() const {
+
+ CXDiagnosticSeverity getSeverity() const override {
return CXDiagnostic_Note;
}
-
- CXSourceLocation getLocation() const {
+
+ CXSourceLocation getLocation() const override {
return Loc;
}
-
- CXString getSpelling() const {
+
+ CXString getSpelling() const override {
return cxstring::createRef(Message.c_str());
}
-
- CXString getDiagnosticOption(CXString *Disable) const {
+
+ CXString getDiagnosticOption(CXString *Disable) const override {
if (Disable)
*Disable = cxstring::createEmpty();
return cxstring::createEmpty();
}
-
- unsigned getCategory() const { return 0; }
- CXString getCategoryText() const { return cxstring::createEmpty(); }
- unsigned getNumRanges() const { return 0; }
- CXSourceRange getRange(unsigned Range) const { return clang_getNullRange(); }
- unsigned getNumFixIts() const { return 0; }
- CXString getFixIt(unsigned FixIt, CXSourceRange *ReplacementRange) const {
+ unsigned getCategory() const override { return 0; }
+ CXString getCategoryText() const override { return cxstring::createEmpty(); }
+
+ unsigned getNumRanges() const override { return 0; }
+ CXSourceRange getRange(unsigned Range) const override {
+ return clang_getNullRange();
+ }
+ unsigned getNumFixIts() const override { return 0; }
+ CXString getFixIt(unsigned FixIt,
+ CXSourceRange *ReplacementRange) const override {
if (ReplacementRange)
*ReplacementRange = clang_getNullRange();
return cxstring::createEmpty();
@@ -93,9 +96,9 @@ public:
virtual ~CXDiagnosticRenderer() {}
- virtual void beginDiagnostic(DiagOrStoredDiag D,
- DiagnosticsEngine::Level Level) {
-
+ void beginDiagnostic(DiagOrStoredDiag D,
+ DiagnosticsEngine::Level Level) override {
+
const StoredDiagnostic *SD = D.dyn_cast<const StoredDiagnostic*>();
if (!SD)
return;
@@ -109,13 +112,13 @@ public:
if (Level != DiagnosticsEngine::Note)
CurrentSet = &CD->getChildDiagnostics();
}
-
- virtual void emitDiagnosticMessage(SourceLocation Loc, PresumedLoc PLoc,
- DiagnosticsEngine::Level Level,
- StringRef Message,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager *SM,
- DiagOrStoredDiag D) {
+
+ void emitDiagnosticMessage(SourceLocation Loc, PresumedLoc PLoc,
+ DiagnosticsEngine::Level Level,
+ StringRef Message,
+ ArrayRef<CharSourceRange> Ranges,
+ const SourceManager *SM,
+ DiagOrStoredDiag D) override {
if (!D.isNull())
return;
@@ -127,20 +130,20 @@ public:
CXDiagnosticImpl *CD = new CXDiagnosticCustomNoteImpl(Message, L);
CurrentSet->appendDiagnostic(CD);
}
-
- virtual void emitDiagnosticLoc(SourceLocation Loc, PresumedLoc PLoc,
- DiagnosticsEngine::Level Level,
- ArrayRef<CharSourceRange> Ranges,
- const SourceManager &SM) {}
-
- virtual void emitCodeContext(SourceLocation Loc,
- DiagnosticsEngine::Level Level,
- SmallVectorImpl<CharSourceRange>& Ranges,
- ArrayRef<FixItHint> Hints,
- const SourceManager &SM) {}
-
- virtual void emitNote(SourceLocation Loc, StringRef Message,
- const SourceManager *SM) {
+
+ void emitDiagnosticLoc(SourceLocation Loc, PresumedLoc PLoc,
+ DiagnosticsEngine::Level Level,
+ ArrayRef<CharSourceRange> Ranges,
+ const SourceManager &SM) override {}
+
+ void emitCodeContext(SourceLocation Loc,
+ DiagnosticsEngine::Level Level,
+ SmallVectorImpl<CharSourceRange>& Ranges,
+ ArrayRef<FixItHint> Hints,
+ const SourceManager &SM) override {}
+
+ void emitNote(SourceLocation Loc, StringRef Message,
+ const SourceManager *SM) override {
CXSourceLocation L;
if (SM)
L = translateSourceLocation(*SM, LangOpts, Loc);
@@ -183,7 +186,7 @@ CXDiagnosticSetImpl *cxdiag::lazyCreateDiags(CXTranslationUnit TU,
// Diagnostics in the ASTUnit were updated, reset the associated
// diagnostics.
delete Set;
- TU->Diagnostics = 0;
+ TU->Diagnostics = nullptr;
}
}
@@ -208,26 +211,39 @@ CXDiagnosticSetImpl *cxdiag::lazyCreateDiags(CXTranslationUnit TU,
extern "C" {
unsigned clang_getNumDiagnostics(CXTranslationUnit Unit) {
+ if (cxtu::isNotUsableTU(Unit)) {
+ LOG_BAD_TU(Unit);
+ return 0;
+ }
if (!cxtu::getASTUnit(Unit))
return 0;
return lazyCreateDiags(Unit, /*checkIfChanged=*/true)->getNumDiagnostics();
}
CXDiagnostic clang_getDiagnostic(CXTranslationUnit Unit, unsigned Index) {
+ if (cxtu::isNotUsableTU(Unit)) {
+ LOG_BAD_TU(Unit);
+ return nullptr;
+ }
+
CXDiagnosticSet D = clang_getDiagnosticSetFromTU(Unit);
if (!D)
- return 0;
+ return nullptr;
CXDiagnosticSetImpl *Diags = static_cast<CXDiagnosticSetImpl*>(D);
if (Index >= Diags->getNumDiagnostics())
- return 0;
+ return nullptr;
return Diags->getDiagnostic(Index);
}
-
+
CXDiagnosticSet clang_getDiagnosticSetFromTU(CXTranslationUnit Unit) {
+ if (cxtu::isNotUsableTU(Unit)) {
+ LOG_BAD_TU(Unit);
+ return nullptr;
+ }
if (!cxtu::getASTUnit(Unit))
- return 0;
+ return nullptr;
return static_cast<CXDiagnostic>(lazyCreateDiags(Unit));
}
@@ -251,7 +267,7 @@ CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) {
CXFile File;
unsigned Line, Column;
clang_getSpellingLocation(clang_getDiagnosticLocation(Diagnostic),
- &File, &Line, &Column, 0);
+ &File, &Line, &Column, nullptr);
if (File) {
CXString FName = clang_getFileName(File);
Out << clang_getCString(FName) << ":" << Line << ":";
@@ -269,10 +285,10 @@ CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) {
unsigned StartLine, StartColumn, EndLine, EndColumn;
clang_getSpellingLocation(clang_getRangeStart(Range),
&StartFile, &StartLine, &StartColumn,
- 0);
+ nullptr);
clang_getSpellingLocation(clang_getRangeEnd(Range),
- &EndFile, &EndLine, &EndColumn, 0);
-
+ &EndFile, &EndLine, &EndColumn, nullptr);
+
if (StartFile != EndFile || StartFile != File)
continue;
@@ -310,7 +326,7 @@ CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) {
bool NeedComma = false;
if (Options & CXDiagnostic_DisplayOption) {
- CXString OptionName = clang_getDiagnosticOption(Diagnostic, 0);
+ CXString OptionName = clang_getDiagnosticOption(Diagnostic, nullptr);
if (const char *OptionText = clang_getCString(OptionName)) {
if (OptionText[0]) {
Out << " [" << OptionText;
@@ -396,7 +412,7 @@ unsigned clang_getDiagnosticCategory(CXDiagnostic Diag) {
}
CXString clang_getDiagnosticCategoryName(unsigned Category) {
- // Kept for backwards compatibility.
+ // Kept for backward compatibility.
return cxstring::createRef(DiagnosticIDs::getCategoryNameFromID(Category));
}
@@ -437,9 +453,10 @@ CXString clang_getDiagnosticFixIt(CXDiagnostic Diag, unsigned FixIt,
}
void clang_disposeDiagnosticSet(CXDiagnosticSet Diags) {
- CXDiagnosticSetImpl *D = static_cast<CXDiagnosticSetImpl*>(Diags);
- if (D->isExternallyManaged())
- delete D;
+ if (CXDiagnosticSetImpl *D = static_cast<CXDiagnosticSetImpl *>(Diags)) {
+ if (D->isExternallyManaged())
+ delete D;
+ }
}
CXDiagnostic clang_getDiagnosticInSet(CXDiagnosticSet Diags,
@@ -447,15 +464,15 @@ CXDiagnostic clang_getDiagnosticInSet(CXDiagnosticSet Diags,
if (CXDiagnosticSetImpl *D = static_cast<CXDiagnosticSetImpl*>(Diags))
if (Index < D->getNumDiagnostics())
return D->getDiagnostic(Index);
- return 0;
+ return nullptr;
}
CXDiagnosticSet clang_getChildDiagnostics(CXDiagnostic Diag) {
if (CXDiagnosticImpl *D = static_cast<CXDiagnosticImpl *>(Diag)) {
CXDiagnosticSetImpl &ChildDiags = D->getChildDiagnostics();
- return ChildDiags.empty() ? 0 : (CXDiagnosticSet) &ChildDiags;
+ return ChildDiags.empty() ? nullptr : (CXDiagnosticSet) &ChildDiags;
}
- return 0;
+ return nullptr;
}
unsigned clang_getNumDiagnosticsInSet(CXDiagnosticSet Diags) {