about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--include/klee/Expr.h8
-rw-r--r--lib/Core/Memory.h6
-rw-r--r--lib/Expr/Parser.cpp4
3 files changed, 12 insertions, 6 deletions
diff --git a/include/klee/Expr.h b/include/klee/Expr.h
index e774eaff..d9cdf5e0 100644
--- a/include/klee/Expr.h
+++ b/include/klee/Expr.h
@@ -473,8 +473,11 @@ private:
 
 class Array {
 public:
+  const std::string name;
+  // FIXME: This does not belong here.
   const MemoryObject *object;
   unsigned id;
+  // FIXME: Not 64-bit clean.
   unsigned size;
 
   // FIXME: This does not belong here.
@@ -486,8 +489,9 @@ public:
   // object! We should probably use the pointer for talking to STP, as
   // long as we can guarantee that it won't be a "stale" reference
   // once we have freed it.
-  Array(const MemoryObject *_object, unsigned _id, uint64_t _size) 
-    : object(_object), id(_id), size(_size), stpInitialArray(0) {}
+  Array(const std::string &_name, const MemoryObject *_object, 
+        unsigned _id, uint64_t _size) 
+    : name(_name), object(_object), id(_id), size(_size), stpInitialArray(0) {}
   ~Array() {
     // FIXME: This relies on caller to delete the STP array.
     assert(!stpInitialArray && "Array must be deleted by caller!");
diff --git a/lib/Core/Memory.h b/lib/Core/Memory.h
index cfb4ab43..537c783a 100644
--- a/lib/Core/Memory.h
+++ b/lib/Core/Memory.h
@@ -12,6 +12,8 @@
 
 #include "klee/Expr.h"
 
+#include "llvm/ADT/StringExtras.h"
+
 #include <vector>
 #include <string>
 
@@ -69,7 +71,7 @@ public:
   MemoryObject(uint64_t _address) 
     : id(counter++),
       address(_address),
-      array(new Array(this, 0, id)),
+      array(new Array("arr" + llvm::utostr(id), this, 0, id)),
       size(0),
       isFixed(true),
       allocSite(0) {
@@ -80,7 +82,7 @@ public:
                const llvm::Value *_allocSite) 
     : id(counter++),
       address(_address),
-      array(new Array(this, id, _size)),
+      array(new Array("arr" + llvm::utostr(id), this, id, _size)),
       size(_size),
       name("unnamed"),
       isLocal(_isLocal),
diff --git a/lib/Expr/Parser.cpp b/lib/Expr/Parser.cpp
index 496472bf..77596727 100644
--- a/lib/Expr/Parser.cpp
+++ b/lib/Expr/Parser.cpp
@@ -521,7 +521,7 @@ DeclResult ParserImpl::ParseArrayDecl() {
   // FIXME: Array should take domain and range.
   const Identifier *Label = GetOrCreateIdentifier(Name);
   static int counter = 0;
-  Array *Root = new Array(0, ++counter, Size.get());
+  Array *Root = new Array(Label->Name, 0, ++counter, Size.get());
   ArrayDecl *AD = new ArrayDecl(Label, Size.get(), 
                                 DomainType.get(), RangeType.get(), Root);
 
@@ -1300,7 +1300,7 @@ VersionResult ParserImpl::ParseVersionSpecifier() {
   VersionResult Res = ParseVersion();
   // Define update list to avoid use-of-undef errors.
   if (!Res.isValid()) {
-    Res = VersionResult(true, UpdateList(new Array(0, -1, 0), NULL));
+    Res = VersionResult(true, UpdateList(new Array("", 0, -1, 0), NULL));
   }
   
   if (Label)