[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 15fd52b..f990095 100644
--- a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
+++ b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
@@ -138,17 +138,6 @@
     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 4eabd7a..a86f586 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 @@
 namespace {
 class NSAutoreleasePoolChecker
   : public Checker<check::PreObjCMessage> {
-      
+  mutable llvm::OwningPtr<BugType> BT;
   mutable Selector releaseS;
 
 public:
@@ -65,16 +66,21 @@
   // 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) {