[PATCH] D51655: [analyzer] Remove traces of ubigraph visualization
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 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 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 Out; - std::string Filename; - unsigned Cntr; - - typedef llvm::DenseMap VMap; - VMap M; - -public: - UbigraphViz(std::unique_ptr Out, StringRef Filename); - - ~UbigraphViz() override; - - void AddEdge(ExplodedNode *Src, ExplodedNode *Dst) override; -}; - -} // end anonymous namespace - -static std::unique_ptr CreateUbiViz() { - SmallString<128> P; - int FD; - llvm::sys::fs::createTemporaryFile("llvm_ubi", "", FD, P); - llvm::errs() << "Writing '" << P << "'.\n"; - - auto Stream = llvm::make_unique(FD, true); - - return llvm::make_unique(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 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 Args{{Ubiviz, Filename}}; - - if (llvm::sys::ExecuteAndWait(Ubiviz, Args, llvm::None, {}, 0, 0, &ErrMsg)) { -llvm::errs() << "Error viewing
[PATCH] D51655: [analyzer] Remove traces of ubigraph visualization
NoQ accepted this revision. NoQ added a comment. This revision is now accepted and ready to land. I actually thought it's just a different name for graphviz :/ I've definitely never heard of anybody using ubigraph for this purpose. And it's an analyzer-specific feature. Let's remove. https://reviews.llvm.org/D51655 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51655: [analyzer] Remove traces of ubigraph visualization
george.karpenkov created this revision. george.karpenkov added reviewers: dcoughlin, NoQ. Herald added subscribers: Szelethus, mikhail.ramalho, a.sidorin, szepet, baloghadamsoftware, xazax.hun, whisperity. Ubigraph project has been dead since about 2008, and to the best of my knowledge, no one was using it. Previously, I wasn't able to launch the existing binary at all. https://reviews.llvm.org/D51655 Files: clang/include/clang/Driver/CC1Options.td clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h clang/lib/Frontend/CompilerInvocation.cpp clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp clang/test/Analysis/ubigraph-viz.cpp clang/tools/scan-build-py/libscanbuild/analyze.py clang/tools/scan-build/libexec/ccc-analyzer clang/utils/analyzer/ubiviz Index: clang/utils/analyzer/ubiviz === --- clang/utils/analyzer/ubiviz +++ /dev/null @@ -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:]) Index: clang/tools/scan-build/libexec/ccc-analyzer === --- clang/tools/scan-build/libexec/ccc-analyzer +++ clang/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: clang/tools/scan-build-py/libscanbuild/analyze.py === --- clang/tools/scan-build-py/libscanbuild/analyze.py +++ clang/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: clang/test/Analysis/ubigraph-viz.cpp === --- clang/test/Analysis/ubigraph-viz.cpp +++ /dev/null @@ -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: clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp === --- clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -50,8 +50,6 @@ #define DEBUG_TYPE "AnalysisConsumer" -static std::uniq