This revision was automatically updated to reflect the committed changes.
Closed by commit rL341601: [analyzer] Remove traces of ubigraph visualization 
(authored by george.karpenkov, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D51655?vs=163895&id=164311#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D51655

Files:
  cfe/trunk/include/clang/Driver/CC1Options.td
  cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
  cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
  cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
  cfe/trunk/lib/Frontend/CompilerInvocation.cpp
  cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
  cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
  cfe/trunk/test/Analysis/ubigraph-viz.cpp
  cfe/trunk/tools/scan-build-py/libscanbuild/analyze.py
  cfe/trunk/tools/scan-build/libexec/ccc-analyzer
  cfe/trunk/utils/analyzer/ubiviz

Index: cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -50,8 +50,6 @@
 
 #define DEBUG_TYPE "AnalysisConsumer"
 
-static std::unique_ptr<ExplodedNode::Auditor> CreateUbiViz();
-
 STATISTIC(NumFunctionTopLevel, "The # of functions at top level.");
 STATISTIC(NumFunctionsAnalyzed,
                       "The # of functions and blocks analyzed (as top level "
@@ -743,21 +741,10 @@
   ExprEngine Eng(CTU, *Mgr, ObjCGCEnabled, VisitedCallees, &FunctionSummaries,
                  IMode);
 
-  // Set the graph auditor.
-  std::unique_ptr<ExplodedNode::Auditor> Auditor;
-  if (Mgr->options.visualizeExplodedGraphWithUbiGraph) {
-    Auditor = CreateUbiViz();
-    ExplodedNode::SetAuditor(Auditor.get());
-  }
-
   // Execute the worklist algorithm.
   Eng.ExecuteWorkList(Mgr->getAnalysisDeclContextManager().getStackFrame(D),
                       Mgr->options.getMaxNodesPerTopLevelFunction());
 
-  // Release the auditor (if any) so that it doesn't monitor the graph
-  // created BugReporter.
-  ExplodedNode::SetAuditor(nullptr);
-
   // Visualize the exploded graph.
   if (Mgr->options.visualizeExplodedGraphWithGraphViz)
     Eng.ViewGraph(Mgr->options.TrimGraph);
@@ -803,98 +790,3 @@
       CI.getFrontendOpts().Plugins,
       hasModelPath ? new ModelInjector(CI) : nullptr);
 }
-
-//===----------------------------------------------------------------------===//
-// Ubigraph Visualization.  FIXME: Move to separate file.
-//===----------------------------------------------------------------------===//
-
-namespace {
-
-class UbigraphViz : public ExplodedNode::Auditor {
-  std::unique_ptr<raw_ostream> Out;
-  std::string Filename;
-  unsigned Cntr;
-
-  typedef llvm::DenseMap<void*,unsigned> VMap;
-  VMap M;
-
-public:
-  UbigraphViz(std::unique_ptr<raw_ostream> Out, StringRef Filename);
-
-  ~UbigraphViz() override;
-
-  void AddEdge(ExplodedNode *Src, ExplodedNode *Dst) override;
-};
-
-} // end anonymous namespace
-
-static std::unique_ptr<ExplodedNode::Auditor> CreateUbiViz() {
-  SmallString<128> P;
-  int FD;
-  llvm::sys::fs::createTemporaryFile("llvm_ubi", "", FD, P);
-  llvm::errs() << "Writing '" << P << "'.\n";
-
-  auto Stream = llvm::make_unique<llvm::raw_fd_ostream>(FD, true);
-
-  return llvm::make_unique<UbigraphViz>(std::move(Stream), P);
-}
-
-void UbigraphViz::AddEdge(ExplodedNode *Src, ExplodedNode *Dst) {
-
-  assert (Src != Dst && "Self-edges are not allowed.");
-
-  // Lookup the Src.  If it is a new node, it's a root.
-  VMap::iterator SrcI= M.find(Src);
-  unsigned SrcID;
-
-  if (SrcI == M.end()) {
-    M[Src] = SrcID = Cntr++;
-    *Out << "('vertex', " << SrcID << ", ('color','#00ff00'))\n";
-  }
-  else
-    SrcID = SrcI->second;
-
-  // Lookup the Dst.
-  VMap::iterator DstI= M.find(Dst);
-  unsigned DstID;
-
-  if (DstI == M.end()) {
-    M[Dst] = DstID = Cntr++;
-    *Out << "('vertex', " << DstID << ")\n";
-  }
-  else {
-    // We have hit DstID before.  Change its style to reflect a cache hit.
-    DstID = DstI->second;
-    *Out << "('change_vertex_style', " << DstID << ", 1)\n";
-  }
-
-  // Add the edge.
-  *Out << "('edge', " << SrcID << ", " << DstID
-       << ", ('arrow','true'), ('oriented', 'true'))\n";
-}
-
-UbigraphViz::UbigraphViz(std::unique_ptr<raw_ostream> OutStream,
-                         StringRef Filename)
-    : Out(std::move(OutStream)), Filename(Filename), Cntr(0) {
-
-  *Out << "('vertex_style_attribute', 0, ('shape', 'icosahedron'))\n";
-  *Out << "('vertex_style', 1, 0, ('shape', 'sphere'), ('color', '#ffcc66'),"
-          " ('size', '1.5'))\n";
-}
-
-UbigraphViz::~UbigraphViz() {
-  Out.reset();
-  llvm::errs() << "Running 'ubiviz' program... ";
-  std::string ErrMsg;
-  std::string Ubiviz;
-  if (auto Path = llvm::sys::findProgramByName("ubiviz"))
-    Ubiviz = *Path;
-  std::array<StringRef, 2> Args{{Ubiviz, Filename}};
-
-  if (llvm::sys::ExecuteAndWait(Ubiviz, Args, llvm::None, {}, 0, 0, &ErrMsg)) {
-    llvm::errs() << "Error viewing graph: " << ErrMsg << "\n";
-  }
-
-  // Delete the file.
-  llvm::sys::fs::remove(Filename);
-}
Index: cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
@@ -36,23 +36,6 @@
 using namespace ento;
 
 //===----------------------------------------------------------------------===//
-// Node auditing.
-//===----------------------------------------------------------------------===//
-
-// An out of line virtual method to provide a home for the class vtable.
-ExplodedNode::Auditor::~Auditor() = default;
-
-#ifndef NDEBUG
-static ExplodedNode::Auditor* NodeAuditor = nullptr;
-#endif
-
-void ExplodedNode::SetAuditor(ExplodedNode::Auditor* A) {
-#ifndef NDEBUG
-  NodeAuditor = A;
-#endif
-}
-
-//===----------------------------------------------------------------------===//
 // Cleanup.
 //===----------------------------------------------------------------------===//
 
@@ -224,9 +207,6 @@
   assert(!V->isSink());
   Preds.addNode(V, G);
   V->Succs.addNode(this, G);
-#ifndef NDEBUG
-  if (NodeAuditor) NodeAuditor->AddEdge(V, this);
-#endif
 }
 
 void ExplodedNode::NodeGroup::replaceNode(ExplodedNode *node) {
Index: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp
@@ -284,8 +284,6 @@
 
   Opts.visualizeExplodedGraphWithGraphViz =
     Args.hasArg(OPT_analyzer_viz_egraph_graphviz);
-  Opts.visualizeExplodedGraphWithUbiGraph =
-    Args.hasArg(OPT_analyzer_viz_egraph_ubigraph);
   Opts.NoRetryExhausted = Args.hasArg(OPT_analyzer_disable_retry_exhausted);
   Opts.AnalyzeAll = Args.hasArg(OPT_analyzer_opt_analyze_headers);
   Opts.AnalyzerDisplayProgress = Args.hasArg(OPT_analyzer_display_progress);
Index: cfe/trunk/tools/scan-build-py/libscanbuild/analyze.py
===================================================================
--- cfe/trunk/tools/scan-build-py/libscanbuild/analyze.py
+++ cfe/trunk/tools/scan-build-py/libscanbuild/analyze.py
@@ -395,8 +395,6 @@
     if args.disable_checker:
         checkers = ','.join(args.disable_checker)
         result.extend(['-analyzer-disable-checker', checkers])
-    if os.getenv('UBIVIZ'):
-        result.append('-analyzer-viz-egraph-ubigraph')
 
     return prefix_with('-Xclang', result)
 
Index: cfe/trunk/tools/scan-build/libexec/ccc-analyzer
===================================================================
--- cfe/trunk/tools/scan-build/libexec/ccc-analyzer
+++ cfe/trunk/tools/scan-build/libexec/ccc-analyzer
@@ -243,11 +243,6 @@
       push @Args, "-Xclang", $arg;
     }
 
-    # Display Ubiviz graph?
-    if (defined $ENV{'CCC_UBI'}) {
-      push @Args, "-Xclang", "-analyzer-viz-egraph-ubigraph";
-    }
-
     if (defined $AnalyzerTarget) {
       push @Args, "-target", $AnalyzerTarget;
     }
Index: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
===================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
@@ -164,7 +164,6 @@
 
   unsigned TrimGraph : 1;
   unsigned visualizeExplodedGraphWithGraphViz : 1;
-  unsigned visualizeExplodedGraphWithUbiGraph : 1;
   unsigned UnoptimizedCFG : 1;
   unsigned PrintStats : 1;
 
@@ -361,7 +360,7 @@
         AnalyzerDisplayProgress(false), AnalyzeNestedBlocks(false),
         eagerlyAssumeBinOpBifurcation(false), TrimGraph(false),
         visualizeExplodedGraphWithGraphViz(false),
-        visualizeExplodedGraphWithUbiGraph(false), UnoptimizedCFG(false),
+        UnoptimizedCFG(false),
         PrintStats(false), NoRetryExhausted(false), CXXMemberInliningMode() {}
 
   /// Interprets an option's string value as a boolean. The "true" string is
Index: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
===================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
@@ -240,18 +240,6 @@
     return const_cast<ExplodedNode*>(this)->succ_end();
   }
 
-  // For debugging.
-
-public:
-  class Auditor {
-  public:
-    virtual ~Auditor();
-
-    virtual void AddEdge(ExplodedNode *Src, ExplodedNode *Dst) = 0;
-  };
-
-  static void SetAuditor(Auditor* A);
-
 private:
   void replaceSuccessor(ExplodedNode *node) { Succs.replaceNode(node); }
   void replacePredecessor(ExplodedNode *node) { Preds.replaceNode(node); }
Index: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
===================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
@@ -100,8 +100,7 @@
   void FlushDiagnostics();
 
   bool shouldVisualize() const {
-    return options.visualizeExplodedGraphWithGraphViz ||
-           options.visualizeExplodedGraphWithUbiGraph;
+    return options.visualizeExplodedGraphWithGraphViz;
   }
 
   bool shouldInlineCall() const {
Index: cfe/trunk/include/clang/Driver/CC1Options.td
===================================================================
--- cfe/trunk/include/clang/Driver/CC1Options.td
+++ cfe/trunk/include/clang/Driver/CC1Options.td
@@ -80,8 +80,6 @@
   HelpText<"Only show error-related paths in the analysis graph">;
 def analyzer_viz_egraph_graphviz : Flag<["-"], "analyzer-viz-egraph-graphviz">,
   HelpText<"Display exploded graph using GraphViz">;
-def analyzer_viz_egraph_ubigraph : Flag<["-"], "analyzer-viz-egraph-ubigraph">,
-  HelpText<"Display exploded graph using Ubigraph">;
 
 def analyzer_inline_max_stack_depth : Separate<["-"], "analyzer-inline-max-stack-depth">,
   HelpText<"Bound on stack depth while inlining (4 by default)">;
Index: cfe/trunk/test/Analysis/ubigraph-viz.cpp
===================================================================
--- cfe/trunk/test/Analysis/ubigraph-viz.cpp
+++ cfe/trunk/test/Analysis/ubigraph-viz.cpp
@@ -1,7 +0,0 @@
-// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix.API -analyzer-viz-egraph-ubigraph -verify %s
-// expected-no-diagnostics
-
-int f(int x) {
-  return x < 0 ? 0 : 42;
-}
-
Index: cfe/trunk/utils/analyzer/ubiviz
===================================================================
--- cfe/trunk/utils/analyzer/ubiviz
+++ cfe/trunk/utils/analyzer/ubiviz
@@ -1,76 +0,0 @@
-#!/usr/bin/env python
-#
-#                     The LLVM Compiler Infrastructure
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===--------------------------------------------------------------------===##
-#
-# This script reads visualization data emitted by the static analyzer for
-# display in Ubigraph.
-#
-##===--------------------------------------------------------------------===##
-
-import xmlrpclib
-import sys
-
-
-def Error(message):
-    print >> sys.stderr, 'ubiviz: ' + message
-    sys.exit(1)
-
-
-def StreamData(filename):
-    file = open(filename)
-    for ln in file:
-        yield eval(ln)
-    file.close()
-
-
-def Display(G, data):
-    action = data[0]
-    if action == 'vertex':
-        vertex = data[1]
-        G.new_vertex_w_id(vertex)
-        for attribute in data[2:]:
-            G.set_vertex_attribute(vertex, attribute[0], attribute[1])
-    elif action == 'edge':
-        src = data[1]
-        dst = data[2]
-        edge = G.new_edge(src, dst)
-        for attribute in data[3:]:
-            G.set_edge_attribute(edge, attribute[0], attribute[1])
-    elif action == "vertex_style":
-        style_id = data[1]
-        parent_id = data[2]
-        G.new_vertex_style_w_id(style_id, parent_id)
-        for attribute in data[3:]:
-            G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
-    elif action == "vertex_style_attribute":
-        style_id = data[1]
-        for attribute in data[2:]:
-            G.set_vertex_style_attribute(style_id, attribute[0], attribute[1])
-    elif action == "change_vertex_style":
-        vertex_id = data[1]
-        style_id = data[2]
-        G.change_vertex_style(vertex_id, style_id)
-
-
-def main(args):
-    if len(args) == 0:
-        Error('no input files')
-
-    server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2')
-    G = server.ubigraph
-
-    for arg in args:
-        G.clear()
-        for x in StreamData(arg):
-            Display(G, x)
-
-    sys.exit(0)
-
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to