diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-07-14 17:40:50 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-07-14 17:40:50 +0000 |
commit | 0255531dd39d9ef8a5acbaaead29a3d54a0270a7 (patch) | |
tree | 868e61154fdf7956e699f55ebb14a6c6399ab03d /clang/lib/Analysis/BugReporter.cpp | |
parent | 673cf1836bd5b0eb32150bb09dd7de0228b5db31 (diff) | |
download | bcm5719-llvm-0255531dd39d9ef8a5acbaaead29a3d54a0270a7.tar.gz bcm5719-llvm-0255531dd39d9ef8a5acbaaead29a3d54a0270a7.zip |
Added method "EmitBasicReport" to BugReporter to simplify the emission of simple bug diagnostics.
Refactored error reporting in CheckObjCDealloc and CheckObjCInstMethSignature to use this new bug reporting interface (major code simplification).
llvm-svn: 53560
Diffstat (limited to 'clang/lib/Analysis/BugReporter.cpp')
-rw-r--r-- | clang/lib/Analysis/BugReporter.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/clang/lib/Analysis/BugReporter.cpp b/clang/lib/Analysis/BugReporter.cpp index 081e7925eed..cbd61f8d25a 100644 --- a/clang/lib/Analysis/BugReporter.cpp +++ b/clang/lib/Analysis/BugReporter.cpp @@ -731,12 +731,12 @@ void BugReporter::EmitWarning(BugReport& R) { // Determine the range. const SourceRange *Beg, *End; - + if (!D->empty()) { Beg = D->back()->ranges_begin(); End = D->back()->ranges_end(); } - else + else R.getRanges(*this, Beg, End); if (PD) { @@ -745,18 +745,18 @@ void BugReporter::EmitWarning(BugReport& R) { for ( ; Beg != End; ++Beg) piece->addRange(*Beg); - D->push_back(piece); + D->push_back(piece); PD->HandlePathDiagnostic(D.take()); } else { - std::ostringstream os; - + std::ostringstream os; + if (D->empty()) os << R.getDescription(); else os << D->back()->getString(); - - + + Diagnostic& Diag = getDiagnostic(); unsigned ErrorDiag = Diag.getCustomDiagID(Diagnostic::Warning, os.str().c_str()); @@ -764,3 +764,19 @@ void BugReporter::EmitWarning(BugReport& R) { Diag.Report(L, ErrorDiag, NULL, 0, Beg, End - Beg); } } + +void +BugReporter::EmitBasicReport(const char* name, const char* str, + SourceLocation Loc) { + + SimpleBugType BT(name); + DiagCollector C(BT); + Diagnostic& Diag = getDiagnostic(); + Diag.Report(&C, getContext().getFullLoc(Loc), + Diag.getCustomDiagID(Diagnostic::Warning, str), + 0, 0, 0, 0); + + for (DiagCollector::iterator I = C.begin(), E = C.end(); I != E; ++I) + EmitWarning(*I); +} + |