[cfe-commits] r55459 - in /cfe/trunk: Driver/AnalysisConsumer.cpp utils/ubiviz
Ted Kremenek
kremenek at apple.com
Wed Aug 27 20:54:51 PDT 2008
Author: kremenek
Date: Wed Aug 27 22:54:51 2008
New Revision: 55459
URL: http://llvm.org/viewvc/llvm-project?rev=55459&view=rev
Log:
Automatically execute ubiviz.
Cleanup ubigraph files when don't drawing the graphs.
Modified:
cfe/trunk/Driver/AnalysisConsumer.cpp
cfe/trunk/utils/ubiviz
Modified: cfe/trunk/Driver/AnalysisConsumer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/AnalysisConsumer.cpp?rev=55459&r1=55458&r2=55459&view=diff
==============================================================================
--- cfe/trunk/Driver/AnalysisConsumer.cpp (original)
+++ cfe/trunk/Driver/AnalysisConsumer.cpp Wed Aug 27 22:54:51 2008
@@ -33,6 +33,7 @@
#include "llvm/Support/Streams.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Path.h"
+#include "llvm/System/Program.h"
#include <vector>
using namespace clang;
@@ -470,13 +471,19 @@
class UbigraphViz : public ExplodedNodeImpl::Auditor {
llvm::OwningPtr<llvm::raw_ostream> Out;
+ llvm::sys::Path Dir, Filename;
unsigned Cntr;
typedef llvm::DenseMap<void*,unsigned> VMap;
VMap M;
public:
- UbigraphViz(llvm::raw_ostream* out) : Out(out), Cntr(0) {}
+ UbigraphViz(llvm::raw_ostream* out, llvm::sys::Path& dir,
+ llvm::sys::Path& filename)
+ : Out(out), Dir(dir), Filename(filename), Cntr(0) {}
+
+ ~UbigraphViz();
+
virtual void AddEdge(ExplodedNodeImpl* Src, ExplodedNodeImpl* Dst);
};
@@ -485,10 +492,11 @@
static ExplodedNodeImpl::Auditor* CreateUbiViz() {
std::string ErrMsg;
- llvm::sys::Path Filename = llvm::sys::Path::GetTemporaryDirectory(&ErrMsg);
+ llvm::sys::Path Dir = llvm::sys::Path::GetTemporaryDirectory(&ErrMsg);
if (!ErrMsg.empty())
return 0;
+ llvm::sys::Path Filename = Dir;
Filename.appendComponent("llvm_ubi");
Filename.makeUnique(true,&ErrMsg);
@@ -504,7 +512,7 @@
if (!ErrMsg.empty())
return 0;
- return new UbigraphViz(Stream.take());
+ return new UbigraphViz(Stream.take(), Dir, Filename);
}
void UbigraphViz::AddEdge(ExplodedNodeImpl* Src, ExplodedNodeImpl* Dst) {
@@ -535,3 +543,20 @@
<< ", ('arrow','true'), ('oriented', 'true'))\n";
}
+UbigraphViz::~UbigraphViz() {
+ Out.reset(0);
+ llvm::cerr << "Running 'ubiviz' program... ";
+ std::string ErrMsg;
+ llvm::sys::Path Ubiviz = llvm::sys::Program::FindProgramByName("ubiviz");
+ std::vector<const char*> args;
+ args.push_back(Ubiviz.c_str());
+ args.push_back(Filename.c_str());
+ args.push_back(0);
+
+ if (llvm::sys::Program::ExecuteAndWait(Ubiviz, &args[0],0,0,0,0,&ErrMsg)) {
+ llvm::cerr << "Error viewing graph: " << ErrMsg << "\n";
+ }
+
+ // Delete the directory.
+ Dir.eraseFromDisk(true);
+}
\ No newline at end of file
Modified: cfe/trunk/utils/ubiviz
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/ubiviz?rev=55459&r1=55458&r2=55459&view=diff
==============================================================================
--- cfe/trunk/utils/ubiviz (original)
+++ cfe/trunk/utils/ubiviz Wed Aug 27 22:54:51 2008
@@ -50,6 +50,9 @@
G.clear()
for x in StreamData(arg):
Display(G,x)
+
+ sys.exit(0)
+
if __name__ == '__main__':
main(sys.argv[1:])
More information about the cfe-commits
mailing list