diff options
Diffstat (limited to 'tools/libclang/CIndexDiagnostic.cpp')
-rw-r--r-- | tools/libclang/CIndexDiagnostic.cpp | 129 |
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) { |