[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:
parent
da4c8d6811
commit
6b1c21268d
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue