Inlined clang/Analysis/Analyses/GRSimpleVals.h into LocalCheckers.h and removed
GRSimpleVals.h

Added a PathDiagnosticClient option to the driver functions for the
CFRefCountChecker and the GRSimpleVals analysis. Both analyses now accept a "-o"
argument from the driver that specifies where HTML reports should be dumped.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48989 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/GRSimpleVals.cpp b/lib/Analysis/GRSimpleVals.cpp
index 697d256..a6aba83 100644
--- a/lib/Analysis/GRSimpleVals.cpp
+++ b/lib/Analysis/GRSimpleVals.cpp
@@ -16,7 +16,7 @@
 #include "GRSimpleVals.h"
 #include "BasicObjCFoundationChecks.h"
 #include "clang/Analysis/PathSensitive/ValueState.h"
-#include "clang/Basic/Diagnostic.h"
+#include "clang/Analysis/PathDiagnostic.h"
 #include <sstream>
 
 using namespace clang;
@@ -46,28 +46,31 @@
 }
 
 template <typename ITERATOR>
-static void EmitDiag(Diagnostic& Diag, SourceManager& SrcMgr,
-                     unsigned ErrorDiag, ITERATOR I) {  
+static void EmitDiag(Diagnostic& Diag, PathDiagnosticClient* PD,
+                     SourceManager& SrcMgr,
+unsigned ErrorDiag, ITERATOR I) {  
   
   Stmt* S = GetStmt(GetLocation(I));
-  Diag.Report(FullSourceLoc(S->getLocStart(), SrcMgr), ErrorDiag);    
+  Diag.Report(PD, FullSourceLoc(S->getLocStart(), SrcMgr), ErrorDiag);    
 }
 
 
 template <>
-static void EmitDiag(Diagnostic& Diag, SourceManager& SrcMgr,
-                     unsigned ErrorDiag, GRExprEngine::undef_arg_iterator I) {
+static void EmitDiag(Diagnostic& Diag, PathDiagnosticClient* PD, 
+                     SourceManager& SrcMgr, unsigned ErrorDiag,
+                     GRExprEngine::undef_arg_iterator I) {
 
   Stmt* S1 = GetStmt(GetLocation(I));
   Expr* E2 = cast<Expr>(I->second);
   
   SourceLocation Loc = S1->getLocStart();
   SourceRange R = E2->getSourceRange();
-  Diag.Report(FullSourceLoc(Loc, SrcMgr), ErrorDiag, 0, 0, &R, 1);
+  Diag.Report(PD, FullSourceLoc(Loc, SrcMgr), ErrorDiag, 0, 0, &R, 1);
 }
 
 template <typename ITERATOR>
-void EmitWarning(Diagnostic& Diag, SourceManager& SrcMgr,
+void EmitWarning(Diagnostic& Diag,  PathDiagnosticClient* PD,
+                 SourceManager& SrcMgr,
                  ITERATOR I, ITERATOR E, const char* msg) {
  
   std::ostringstream Out;
@@ -97,12 +100,13 @@
       CachedErrors.insert(p);
     }
     
-    EmitDiag(Diag, SrcMgr, ErrorDiag, I);  
+    EmitDiag(Diag, PD, SrcMgr, ErrorDiag, I);  
   }
 }
   
 unsigned RunGRSimpleVals(CFG& cfg, Decl& CD, ASTContext& Ctx,
-                         Diagnostic& Diag, bool Visualize, bool TrimGraph) {
+                         Diagnostic& Diag, PathDiagnosticClient* PD,
+                         bool Visualize, bool TrimGraph) {
   
   GRCoreEngine<GRExprEngine> Eng(cfg, CD, Ctx);
   GRExprEngine* CheckerState = &Eng.getCheckerState();
@@ -118,56 +122,56 @@
   CheckerState->AddObjCMessageExprCheck(FoundationCheck.get());
   
   // Execute the worklist algorithm.
-  Eng.ExecuteWorkList(100000);
+  Eng.ExecuteWorkList(120000);
   
   SourceManager& SrcMgr = Ctx.getSourceManager();  
 
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->null_derefs_begin(),
               CheckerState->null_derefs_end(),
               "Dereference of NULL pointer.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->undef_derefs_begin(),
               CheckerState->undef_derefs_end(),
               "Dereference of undefined value.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->undef_branches_begin(),
               CheckerState->undef_branches_end(),
               "Branch condition evaluates to an uninitialized value.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->explicit_bad_divides_begin(),
               CheckerState->explicit_bad_divides_end(),
               "Division by zero/undefined value.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->undef_results_begin(),
               CheckerState->undef_results_end(),
               "Result of operation is undefined.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->bad_calls_begin(),
               CheckerState->bad_calls_end(),
               "Call using a NULL or undefined function pointer value.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->undef_arg_begin(),
               CheckerState->undef_arg_end(),
               "Pass-by-value argument in function is undefined.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->msg_expr_undef_arg_begin(),
               CheckerState->msg_expr_undef_arg_end(),
               "Pass-by-value argument in message expression is undefined.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->undef_receivers_begin(),
               CheckerState->undef_receivers_end(),
               "Receiver in message expression is an uninitialized value.");
   
-  EmitWarning(Diag, SrcMgr,
+  EmitWarning(Diag, PD, SrcMgr,
               CheckerState->ret_stackaddr_begin(),
               CheckerState->ret_stackaddr_end(),
               "Address of stack-allocated variable returned.");