about summary refs log tree commit diff homepage
path: root/lib/Core
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-06-10 06:18:37 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-06-10 06:18:37 +0000
commit7561acc8b346028bc6eb586ea76b5b2a9400140c (patch)
tree3b1cf15a0f2da08e4d2ce0e221c5ca2521070e49 /lib/Core
parent6517b3a69deac9faacb5139efa44511e5d2a197f (diff)
downloadklee-7561acc8b346028bc6eb586ea76b5b2a9400140c.tar.gz
Change ExecutionState::symbolics to include both the MemoryObject and the
symbolic Array.


git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@73161 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Core')
-rw-r--r--lib/Core/Executor.cpp19
1 files changed, 6 insertions, 13 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index 4c5f9511..28e7111c 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -2941,7 +2941,7 @@ void Executor::executeMakeSymbolic(ExecutionState &state,
   ObjectState *os = bindObjectInState(state, mo, false);
   if (!replayOut) {
     os->makeSymbolic();
-    state.addSymbolic(mo);
+    state.addSymbolic(mo, os->updates.root);
     
     const Array *array = os->updates.root;
     std::map< ExecutionState*, std::vector<SeedInfo> >::iterator it = 
@@ -3149,10 +3149,8 @@ bool Executor::getSymbolicSolution(const ExecutionState &state,
 
   ExecutionState tmp(state);
   if (!NoPreferCex) {
-    for (std::vector<const MemoryObject*>::const_iterator 
-           it = state.symbolics.begin(), ie = state.symbolics.end(); 
-         it != ie; ++it) {
-      const MemoryObject *mo = *it;
+    for (unsigned i = 0; i != state.symbolics.size(); ++i) {
+      const MemoryObject *mo = state.symbolics[i].first;
       std::vector< ref<Expr> >::const_iterator pi = 
         mo->cexPreferences.begin(), pie = mo->cexPreferences.end();
       for (; pi != pie; ++pi) {
@@ -3169,7 +3167,7 @@ bool Executor::getSymbolicSolution(const ExecutionState &state,
   std::vector< std::vector<unsigned char> > values;
   std::vector<const Array*> objects;
   for (unsigned i = 0; i != state.symbolics.size(); ++i)
-    objects.push_back(state.symbolics[i]->array);
+    objects.push_back(state.symbolics[i].second);
   bool success = solver->getInitialValues(tmp, objects, values);
   solver->setTimeout(0);
   if (!success) {
@@ -3180,13 +3178,8 @@ bool Executor::getSymbolicSolution(const ExecutionState &state,
     return false;
   }
   
-  unsigned i = 0;
-  for (std::vector<const MemoryObject*>::const_iterator 
-         it = state.symbolics.begin(), ie = state.symbolics.end(); 
-       it != ie; ++it) {
-    res.push_back(std::make_pair((*it)->name, values[i]));
-    ++i;
-  }
+  for (unsigned i = 0; i != state.symbolics.size(); ++i)
+    res.push_back(std::make_pair(state.symbolics[i].first->name, values[i]));
   return true;
 }