about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorCristian Cadar <c.cadar@imperial.ac.uk>2013-12-05 09:15:53 -0800
committerCristian Cadar <c.cadar@imperial.ac.uk>2013-12-05 09:15:53 -0800
commit6d19d31eed55e18709c95363beafe8f679d6070c (patch)
tree945280a95c48b1e89061d6fd303beed1c5692257
parent7c415a118f1bfc291cc6f2479b78db8041db95a4 (diff)
parent29c87addb0bf80baafc5f561cb68509a70a5b1c5 (diff)
downloadklee-6d19d31eed55e18709c95363beafe8f679d6070c.tar.gz
Merge pull request #11 from MartinNowack/Memleaks
Patch Set II - Memleaks
-rw-r--r--lib/Core/Executor.cpp5
-rw-r--r--lib/Core/ExecutorTimerInfo.h42
-rw-r--r--lib/Core/ExecutorTimers.cpp20
-rw-r--r--lib/Module/KModule.cpp4
-rw-r--r--lib/Module/Passes.h2
-rw-r--r--tools/klee/main.cpp2
6 files changed, 56 insertions, 19 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index 6df8dd14..eadc685b 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -24,6 +24,7 @@
 #include "StatsTracker.h"
 #include "TimingSolver.h"
 #include "UserSearcher.h"
+#include "ExecutorTimerInfo.h"
 #include "../Solver/SolverStats.h"
 
 #include "klee/ExecutionState.h"
@@ -385,6 +386,10 @@ Executor::~Executor() {
     delete statsTracker;
   delete solver;
   delete kmodule;
+  while(!timers.empty()) {
+    delete timers.back();
+    timers.pop_back();
+  }
 }
 
 /***/
diff --git a/lib/Core/ExecutorTimerInfo.h b/lib/Core/ExecutorTimerInfo.h
new file mode 100644
index 00000000..60977b74
--- /dev/null
+++ b/lib/Core/ExecutorTimerInfo.h
@@ -0,0 +1,42 @@
+//===-- Executor.h ----------------------------------------------*- C++ -*-===//
+//
+//                     The KLEE Symbolic Virtual Machine
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Class to wrap information for a timer.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef EXECUTORTIMERINFO_H_
+#define EXECUTORTIMERINFO_H_
+
+#include "klee/Internal/System/Time.h"
+
+namespace klee {
+
+class Executor::TimerInfo {
+public:
+  Timer *timer;
+
+  /// Approximate delay per timer firing.
+  double rate;
+  /// Wall time for next firing.
+  double nextFireTime;
+
+public:
+  TimerInfo(Timer *_timer, double _rate)
+    : timer(_timer),
+      rate(_rate),
+      nextFireTime(util::getWallTime() + rate) {}
+  ~TimerInfo() { delete timer; }
+};
+
+
+}
+
+
+#endif /* EXECUTORTIMERINFO_H_ */
diff --git a/lib/Core/ExecutorTimers.cpp b/lib/Core/ExecutorTimers.cpp
index 6a5314ca..06fd4be7 100644
--- a/lib/Core/ExecutorTimers.cpp
+++ b/lib/Core/ExecutorTimers.cpp
@@ -13,6 +13,7 @@
 #include "Executor.h"
 #include "PTree.h"
 #include "StatsTracker.h"
+#include "ExecutorTimerInfo.h"
 
 #include "klee/ExecutionState.h"
 #include "klee/Internal/Module/InstructionInfoTable.h"
@@ -93,7 +94,7 @@ void Executor::initTimers() {
   }
 
   if (MaxTime) {
-    addTimer(new HaltTimer(this), MaxTime);
+    addTimer(new HaltTimer(this), MaxTime.getValue());
   }
 }
 
@@ -103,23 +104,6 @@ Executor::Timer::Timer() {}
 
 Executor::Timer::~Timer() {}
 
-class Executor::TimerInfo {
-public:
-  Timer *timer;
-  
-  /// Approximate delay per timer firing.
-  double rate;
-  /// Wall time for next firing.
-  double nextFireTime;
-  
-public:
-  TimerInfo(Timer *_timer, double _rate) 
-    : timer(_timer),
-      rate(_rate),
-      nextFireTime(util::getWallTime() + rate) {}
-  ~TimerInfo() { delete timer; }
-};
-
 void Executor::addTimer(Timer *timer, double rate) {
   timers.push_back(new TimerInfo(timer, rate));
 }
diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
index ff13efda..7b23a9c9 100644
--- a/lib/Module/KModule.cpp
+++ b/lib/Module/KModule.cpp
@@ -127,6 +127,10 @@ KModule::~KModule() {
          ie = functions.end(); it != ie; ++it)
     delete *it;
 
+  for (std::map<llvm::Constant*, KConstant*>::iterator it=constantMap.begin(),
+      itE=constantMap.end(); it!=itE;++it)
+    delete it->second;
+
   delete targetData;
   delete module;
 }
diff --git a/lib/Module/Passes.h b/lib/Module/Passes.h
index 0c294daa..c6e09f0f 100644
--- a/lib/Module/Passes.h
+++ b/lib/Module/Passes.h
@@ -64,7 +64,7 @@ public:
 #if LLVM_VERSION_CODE < LLVM_VERSION(2, 8)
   RaiseAsmPass() : llvm::ModulePass((intptr_t) &ID) {}
 #else
-  RaiseAsmPass() : llvm::ModulePass(ID) {}
+  RaiseAsmPass() : llvm::ModulePass(ID), TLI(0) {}
 #endif
   
   virtual bool runOnModule(llvm::Module &M);
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
index 769be28e..0f5ce0c0 100644
--- a/tools/klee/main.cpp
+++ b/tools/klee/main.cpp
@@ -360,6 +360,8 @@ KleeHandler::KleeHandler(int argc, char **argv)
 KleeHandler::~KleeHandler() {
   if (m_pathWriter) delete m_pathWriter;
   if (m_symPathWriter) delete m_symPathWriter;
+  fclose(klee_warning_file);
+  fclose(klee_message_file);
   delete m_infoFile;
 }