]> granicus.if.org Git - clang/commitdiff
Added --grsimple-view option to clang driver; this is the same as
authorTed Kremenek <kremenek@apple.com>
Fri, 15 Feb 2008 00:35:38 +0000 (00:35 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 15 Feb 2008 00:35:38 +0000 (00:35 +0000)
--grsimple except that it visualizes the ExplodedGraph using dot and
outputs the current function being analyzed.  --grsimple is now silent
except when it emits diagnostics.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47146 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/GRSimpleVals.cpp
Driver/ASTConsumers.cpp
Driver/ASTConsumers.h
Driver/clang.cpp
include/clang/Analysis/Analyses/GRSimpleVals.h

index 1e438ee5b3d5e12fe82fda2a2443c748d9223f98..e856c3e5d0854e49be342b7293d9433fcb6ff65c 100644 (file)
@@ -20,7 +20,7 @@ using namespace clang;
 
 namespace clang {
   void RunGRSimpleVals(CFG& cfg, FunctionDecl& FD, ASTContext& Ctx,
-                      Diagnostic& Diag) {
+                      Diagnostic& Diag, bool Visualize) {
     
     if (Diag.hasErrorOccurred())
       return;
@@ -45,7 +45,7 @@ namespace clang {
     }
         
 #ifndef NDEBUG
-    CheckerState->ViewGraph();
+    if (Visualize) CheckerState->ViewGraph();
 #endif  
   }
 } // end clang namespace
index 08e2238a66aec28e7a5b9d30a349ad68ad191cd7..73f843f27a42f744fd745fa8b366d7e469026db1 100644 (file)
@@ -580,20 +580,23 @@ namespace {
   class GRSimpleValsVisitor : public CFGVisitor {
     Diagnostic &Diags;
     ASTContext* Ctx;
+    bool Visualize;
   public:
-    GRSimpleValsVisitor(Diagnostic &diags) : Diags(diags) {}
+    GRSimpleValsVisitor(Diagnostic &diags, bool visualize)
+      : Diags(diags), Visualize(visualize) {}
     
     virtual void Initialize(ASTContext &Context) { Ctx = &Context; }    
     virtual void VisitCFG(CFG& C, FunctionDecl&);
+    virtual bool printFuncDeclStart() { return Visualize; }
   };
 } // end anonymous namespace
 
-ASTConsumer* clang::CreateGRSimpleVals(Diagnostic &Diags) {
-  return new GRSimpleValsVisitor(Diags);
+ASTConsumer* clang::CreateGRSimpleVals(Diagnostic &Diags, bool Visualize) {
+  return new GRSimpleValsVisitor(Diags, Visualize);
 }
 
 void GRSimpleValsVisitor::VisitCFG(CFG& C, FunctionDecl& FD) {
-  RunGRSimpleVals(C, FD, *Ctx, Diags);
+  RunGRSimpleVals(C, FD, *Ctx, Diags, Visualize);
 }
 
 //===----------------------------------------------------------------------===//
index 8a14ff2b9e0004185d645572189c3133d85a7aa2..08d2268162273b35182967888f1f1115aea0aa8b 100644 (file)
@@ -41,7 +41,7 @@ ASTConsumer *CreateDeadStoreChecker(Diagnostic &Diags);
 
 ASTConsumer *CreateUnitValsChecker(Diagnostic &Diags);
   
-ASTConsumer *CreateGRSimpleVals(Diagnostic &Diags);
+ASTConsumer *CreateGRSimpleVals(Diagnostic &Diags, bool Visualize = false);
 
 ASTConsumer *CreateCodeRewriterTest(const std::string& InFile,
                                     Diagnostic &Diags);
index c29730397f0b7caa6f1f9229fcbcb21b8bdd0836..71291ae0a29e2e8f207f32439ee31f63528a7a03 100644 (file)
@@ -68,7 +68,8 @@ enum ProgActions {
   ParseCFGDump,                 // Parse ASTS. Build CFGs. Print CFGs.
   ParseCFGView,                 // Parse ASTS. Build CFGs. View CFGs.
   AnalysisLiveVariables,        // Print results of live-variable analysis.
-  AnalysisGRSimpleVals,          // Perform graph-reachability constant prop.
+  AnalysisGRSimpleVals,         // Perform graph-reachability constant prop.
+  AnalysisGRSimpleValsView,     // Visualize results of path-sens. analysis.
   WarnDeadStores,               // Run DeadStores checker on parsed ASTs.
   WarnDeadStoresCheck,          // Check diagnostics for "DeadStores".
   WarnUninitVals,               // Run UnitializedVariables checker.
@@ -115,6 +116,8 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore,
                         "Flag warnings of uses of unitialized variables."),
              clEnumValN(AnalysisGRSimpleVals, "grsimple",
                         "Perform path-sensitive constant propagation."),
+             clEnumValN(AnalysisGRSimpleValsView, "grsimple-view",
+                        "View results of path-sensitive constant propagation."),
              clEnumValN(TestSerialization, "test-pickling",
                         "Run prototype serializtion code."),
              clEnumValN(EmitLLVM, "emit-llvm",
@@ -974,6 +977,9 @@ static ASTConsumer* CreateASTConsumer(const std::string& InFile,
     case AnalysisGRSimpleVals:
       return CreateGRSimpleVals(Diag);
       
+    case AnalysisGRSimpleValsView:
+      return CreateGRSimpleVals(Diag, true);
+      
     case TestSerialization:
       return CreateSerializationTest(Diag, FileMgr, LangOpts);
       
index 4da6d258db3851d062c5f1356456244c43c98c3c..83b647360a352bc9e12b85ebb7cdb6a54e80b84f 100644 (file)
@@ -25,7 +25,7 @@ namespace clang {
   ///  something more elaborate as the requirements on the interface become
   ///  clearer.
   void RunGRSimpleVals(CFG& cfg, FunctionDecl& FD, ASTContext& Ctx,
-                      Diagnostic& Diag);
+                      Diagnostic& Diag, bool Visualize);
   
 } // end clang namespace