summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/BugReporter.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-07-14 17:40:50 +0000
committerTed Kremenek <kremenek@apple.com>2008-07-14 17:40:50 +0000
commit0255531dd39d9ef8a5acbaaead29a3d54a0270a7 (patch)
tree868e61154fdf7956e699f55ebb14a6c6399ab03d /clang/lib/Analysis/BugReporter.cpp
parent673cf1836bd5b0eb32150bb09dd7de0228b5db31 (diff)
downloadbcm5719-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.cpp30
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);
+}
+
OpenPOWER on IntegriCloud