[analyzer] Remove EmitBasicReport form CheckerContext.

The path sensitive checkers should use EmitBasicReport, which provides the
node information.

llvm-svn: 143060
This commit is contained in:
Anna Zaks 2011-10-26 21:06:39 +00:00
parent da4c8d6811
commit 6b1c21268d
2 changed files with 17 additions and 22 deletions

View File

@ -138,17 +138,6 @@ public:
Eng.getBugReporter().EmitReport(R);
}
/// \brief Emit a very simple diagnostic report. Should only be used for
/// non-path sensitive checkers.
// TODO: We should not need it here!
void EmitBasicReport(StringRef Name,
StringRef Category,
StringRef Str, PathDiagnosticLocation Loc,
SourceRange* RBeg, unsigned NumRanges) {
Eng.getBugReporter().EmitBasicReport(Name, Category, Str, Loc,
RBeg, NumRanges);
}
private:
ExplodedNode *addTransitionImpl(const ProgramState *state,
bool markAsSink,

View File

@ -19,6 +19,7 @@
#include "clang/StaticAnalyzer/Core/Checker.h"
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ObjCMessage.h"
@ -31,7 +32,7 @@ using namespace ento;
namespace {
class NSAutoreleasePoolChecker
: public Checker<check::PreObjCMessage> {
mutable llvm::OwningPtr<BugType> BT;
mutable Selector releaseS;
public:
@ -65,16 +66,21 @@ void NSAutoreleasePoolChecker::checkPreObjCMessage(ObjCMessage msg,
// Sending 'release' message?
if (msg.getSelector() != releaseS)
return;
SourceRange R = msg.getSourceRange();
const LocationContext *LC = C.getPredecessor()->getLocationContext();
const SourceManager &SM = C.getSourceManager();
const Expr *E = msg.getMsgOrPropExpr();
PathDiagnosticLocation L = PathDiagnosticLocation::createBegin(E, SM, LC);
C.EmitBasicReport("Use -drain instead of -release",
"API Upgrade (Apple)",
"Use -drain instead of -release when using NSAutoreleasePool "
"and garbage collection", L, &R, 1);
if (!BT)
BT.reset(new BugType("Use -drain instead of -release",
"API Upgrade (Apple)"));
ExplodedNode *N = C.addTransition();
if (!N) {
assert(0);
return;
}
BugReport *Report = new BugReport(*BT, "Use -drain instead of -release when "
"using NSAutoreleasePool and garbage collection", N);
Report->addRange(msg.getSourceRange());
C.EmitReport(Report);
}
void ento::registerNSAutoreleasePoolChecker(CheckerManager &mgr) {