From: Anna Zaks Date: Wed, 26 Oct 2011 21:06:39 +0000 (+0000) Subject: [analyzer] Remove EmitBasicReport form CheckerContext. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=48468dfeb3ccf099ed51ff5dcb8ae0fe783692fd;p=clang [analyzer] Remove EmitBasicReport form CheckerContext. The path sensitive checkers should use EmitBasicReport, which provides the node information. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143060 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h index 15fd52b558..f990095d57 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h @@ -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, diff --git a/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp b/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp index 4eabd7aaf3..a86f586d1d 100644 --- a/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp @@ -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 { - + mutable llvm::OwningPtr 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) {