diff options
Diffstat (limited to 'lib/Core/Memory.cpp')
-rw-r--r-- | lib/Core/Memory.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/lib/Core/Memory.cpp b/lib/Core/Memory.cpp index 12ca7104..72f0a1fb 100644 --- a/lib/Core/Memory.cpp +++ b/lib/Core/Memory.cpp @@ -14,6 +14,7 @@ #include "klee/Solver.h" #include "klee/util/BitArray.h" #include "klee/Internal/Support/ErrorHandling.h" +#include "klee/util/ArrayCache.h" #include "ObjectHolder.h" #include "MemoryManager.h" @@ -110,9 +111,9 @@ ObjectState::ObjectState(const MemoryObject *mo) readOnly(false) { mo->refCount++; if (!UseConstantArrays) { - // FIXME: Leaked. static unsigned id = 0; - const Array *array = Array::CreateArray("tmp_arr" + llvm::utostr(++id), size); + const Array *array = + getArrayCache()->CreateArray("tmp_arr" + llvm::utostr(++id), size); updates = UpdateList(array, 0); } memset(concreteStore, 0, size); @@ -176,6 +177,11 @@ ObjectState::~ObjectState() { } } +ArrayCache *ObjectState::getArrayCache() const { + assert(object && "object was NULL"); + return object->parent->getArrayCache(); +} + /***/ const UpdateList &ObjectState::getUpdates() const { @@ -215,15 +221,10 @@ const UpdateList &ObjectState::getUpdates() const { Contents[Index->getZExtValue()] = Value; } - // FIXME: We should unique these, there is no good reason to create multiple - // ones. - - // Start a new update list. - // FIXME: Leaked. static unsigned id = 0; - const Array *array = Array::CreateArray("const_arr" + llvm::utostr(++id), size, - &Contents[0], - &Contents[0] + Contents.size()); + const Array *array = getArrayCache()->CreateArray( + "const_arr" + llvm::utostr(++id), size, &Contents[0], + &Contents[0] + Contents.size()); updates = UpdateList(array, 0); // Apply the remaining (non-constant) writes. |