about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore16
-rw-r--r--Makefile.rules2
-rw-r--r--include/klee/Expr.h2
-rw-r--r--include/klee/Internal/ADT/MapOfSets.h1
-rw-r--r--lib/Core/Executor.cpp17
-rw-r--r--lib/Core/StatsTracker.cpp11
-rw-r--r--lib/Expr/Expr.cpp2
-rw-r--r--lib/Expr/Lexer.cpp2
-rw-r--r--lib/Module/KModule.cpp2
-rw-r--r--lib/Solver/STPBuilder.cpp2
-rw-r--r--runtime/POSIX/fd_32.c15
-rw-r--r--test/regression/2007-08-16-invalid-constant-value.c2
-rw-r--r--tools/klee/main.cpp8
13 files changed, 59 insertions, 23 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..f421d69f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+Release/
+Release+Asserts/
+Debug/
+Debug+Asserts/
+
+cscope.*
+
+*.log
+*.sum
+*.out
+*.status
+
+*.config
+*.cfg
+
+config.h
diff --git a/Makefile.rules b/Makefile.rules
index f01649a9..ef72c06c 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -941,7 +941,7 @@ LLVMLibsOptions += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc \
                    -L $(SharedLibDir)
 endif
 LLVMLibsOptions += -lLLVM-$(LLVMVersion)
-LLVMLibsPaths += $(SharedLibDir)/$(SharedPrefix)LLVM-$(LLVMVersion)$(SHLIBEXT)
+LLVMLibsPaths += $(LLVMSharedLibDir)/$(SharedPrefix)LLVM-$(LLVMVersion)$(SHLIBEXT)
 else
 
 ifndef NO_LLVM_CONFIG
diff --git a/include/klee/Expr.h b/include/klee/Expr.h
index 9d170dc5..4bebd521 100644
--- a/include/klee/Expr.h
+++ b/include/klee/Expr.h
@@ -364,7 +364,7 @@ public:
 
   virtual ref<Expr> rebuild(ref<Expr> kids[]) const { 
     assert(0 && "rebuild() on ConstantExpr"); 
-    return (Expr*) this;
+    return const_cast<ConstantExpr*>(this);
   }
 
   virtual unsigned computeHash();
diff --git a/include/klee/Internal/ADT/MapOfSets.h b/include/klee/Internal/ADT/MapOfSets.h
index 25c5e2b9..c7568577 100644
--- a/include/klee/Internal/ADT/MapOfSets.h
+++ b/include/klee/Internal/ADT/MapOfSets.h
@@ -345,7 +345,6 @@ namespace klee {
         if (res) return res;
       }
     } else {
-      typename Node::children_ty::iterator kbegin = n->children.begin();
       typename Node::children_ty::iterator kmid = 
         n->children.lower_bound(*begin);
       for (typename Node::children_ty::iterator it = n->children.begin(),
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp
index 184b0983..069022a2 100644
--- a/lib/Core/Executor.cpp
+++ b/lib/Core/Executor.cpp
@@ -425,17 +425,17 @@ void Executor::initializeGlobals(ExecutionState &state) {
        char' value [0,255]; by EOF (-1); or by any `signed char' value
        [-128,-1).  ISO C requires that the ctype functions work for `unsigned */
   const uint16_t **addr = __ctype_b_loc();
-  addExternalObject(state, (void *)(*addr-128), 
+  addExternalObject(state, const_cast<uint16_t*>(*addr-128),
                     384 * sizeof **addr, true);
   addExternalObject(state, addr, sizeof(*addr), true);
     
   const int32_t **lower_addr = __ctype_tolower_loc();
-  addExternalObject(state, (void *)(*lower_addr-128), 
+  addExternalObject(state, const_cast<int32_t*>(*lower_addr-128),
                     384 * sizeof **lower_addr, true);
   addExternalObject(state, lower_addr, sizeof(*lower_addr), true);
   
   const int32_t **upper_addr = __ctype_toupper_loc();
-  addExternalObject(state, (void *)(*upper_addr-128), 
+  addExternalObject(state, const_cast<int32_t*>(*upper_addr-128),
                     384 * sizeof **upper_addr, true);
   addExternalObject(state, upper_addr, sizeof(*upper_addr), true);
 #endif
@@ -929,8 +929,17 @@ ref<klee::ConstantExpr> Executor::evalConstant(const Constant *c) {
       }
       ref<Expr> res = ConcatExpr::createN(kids.size(), kids.data());
       return cast<ConstantExpr>(res);
+    } else if (const ConstantArray *ca = dyn_cast<ConstantArray>(c)){
+      llvm::SmallVector<ref<Expr>, 4> kids;
+      for (unsigned i = ca->getNumOperands(); i != 0; --i) {
+        unsigned op = i-1;
+        ref<Expr> kid = evalConstant(ca->getOperand(op));
+        kids.push_back(kid);
+      }
+      ref<Expr> res = ConcatExpr::createN(kids.size(), kids.data());
+      return cast<ConstantExpr>(res);
     } else {
-      // Constant{Array,Vector}
+      // Constant{Vector}
       assert(0 && "invalid argument to evalConstant()");
     }
   }
diff --git a/lib/Core/StatsTracker.cpp b/lib/Core/StatsTracker.cpp
index f81d19d8..c0028a05 100644
--- a/lib/Core/StatsTracker.cpp
+++ b/lib/Core/StatsTracker.cpp
@@ -45,6 +45,9 @@
 #include "llvm/System/Path.h"
 #else
 #include "llvm/Support/Path.h"
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 1)
+#include "llvm/Support/FileSystem.h"
+#endif
 #endif
 
 #include <iostream>
@@ -177,10 +180,18 @@ StatsTracker::StatsTracker(Executor &_executor, std::string _objectFilename,
   KModule *km = executor.kmodule;
 
   sys::Path module(objectFilename);
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 1)
   if (!sys::Path(objectFilename).isAbsolute()) {
+#else
+  if (!sys::path::is_absolute(objectFilename)) {
+#endif
     sys::Path current = sys::Path::GetCurrentDirectory();
     current.appendComponent(objectFilename);
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 1)
     if (current.exists())
+#else
+    if (sys::fs::exists(current.c_str()))
+#endif
       objectFilename = current.c_str();
   }
 
diff --git a/lib/Expr/Expr.cpp b/lib/Expr/Expr.cpp
index 1187573b..a28ad907 100644
--- a/lib/Expr/Expr.cpp
+++ b/lib/Expr/Expr.cpp
@@ -342,7 +342,7 @@ void ConstantExpr::toMemory(void *address) {
   case Expr::Int64: *((uint64_t*) address) = getZExtValue(64); break;
   // FIXME: what about machines without x87 support?
   case Expr::Fl80:
-    *((long double*) address) = *(long double*) value.getRawData();
+    *((long double*) address) = *(const long double*) value.getRawData();
     break;
   }
 }
diff --git a/lib/Expr/Lexer.cpp b/lib/Expr/Lexer.cpp
index 95d6072b..9859ff36 100644
--- a/lib/Expr/Lexer.cpp
+++ b/lib/Expr/Lexer.cpp
@@ -54,7 +54,7 @@ const char *Token::getKindName() const {
 
 void Token::dump() {
   llvm::errs() << "(Token \"" << getKindName() << "\" "
-               << (void*) start << " " << length << " "
+               << (const void*) start << " " << length << " "
                << line << " " << column << ")";
 }
 
diff --git a/lib/Module/KModule.cpp b/lib/Module/KModule.cpp
index ea86433e..1629bb79 100644
--- a/lib/Module/KModule.cpp
+++ b/lib/Module/KModule.cpp
@@ -390,7 +390,6 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
     if (NoTruncateSourceLines) {
       *ros << *module;
     } else {
-      bool truncated = false;
       std::string string;
       llvm::raw_string_ostream rss(string);
       rss << *module;
@@ -409,7 +408,6 @@ void KModule::prepare(const Interpreter::ModuleOptions &opts,
           } else {
             ros->write(position, 254);
             *ros << "\n";
-            truncated = true;
           }
           position = end+1;
         }
diff --git a/lib/Solver/STPBuilder.cpp b/lib/Solver/STPBuilder.cpp
index 789eb244..90252656 100644
--- a/lib/Solver/STPBuilder.cpp
+++ b/lib/Solver/STPBuilder.cpp
@@ -435,7 +435,7 @@ ExprHandle STPBuilder::constructSDivByConstant(ExprHandle expr_n, unsigned width
     // STP uniques arrays by name, so we make sure the name is unique by
     // including the address.
     char buf[32];
-    unsigned const addrlen = sprintf(buf, "_%p", (void*)root) + 1; // +1 for null-termination
+    unsigned const addrlen = sprintf(buf, "_%p", (const void*)root) + 1; // +1 for null-termination
     unsigned const space = (root->name.length() > 32 - addrlen)?(32 - addrlen):root->name.length();
     memmove(buf + space, buf, addrlen); // moving the address part to the end
     memcpy(buf, root->name.c_str(), space); // filling out the name part
diff --git a/runtime/POSIX/fd_32.c b/runtime/POSIX/fd_32.c
index 338d9ba2..6246f057 100644
--- a/runtime/POSIX/fd_32.c
+++ b/runtime/POSIX/fd_32.c
@@ -160,8 +160,7 @@ int __getdents(unsigned int fd, struct dirent *dirp, unsigned int count)
 
 /* Forward to 64 versions (uclibc expects versions w/o asm specifier) */
 
-int open64(const char *pathname, int flags, ...) __attribute__((weak));
-int open64(const char *pathname, int flags, ...) {
+__attribute__((weak)) int open64(const char *pathname, int flags, ...) {
   mode_t mode = 0;
 
   if (flags & O_CREAT) {
@@ -175,22 +174,18 @@ int open64(const char *pathname, int flags, ...) {
   return __fd_open(pathname, flags, mode);
 }
 
-off64_t lseek64(int fd, off64_t off, int whence) __attribute__((weak));
-off64_t lseek64(int fd, off64_t off, int whence) {
+__attribute__((weak)) off64_t lseek64(int fd, off64_t off, int whence) {
   return __fd_lseek(fd, off, whence);
 }
 
-int stat64(const char *path, struct stat64 *buf) __attribute__((weak));
-int stat64(const char *path, struct stat64 *buf) {
+__attribute__((weak)) int stat64(const char *path, struct stat64 *buf) {
   return __fd_stat(path, buf);
 }
 
-int lstat64(const char *path, struct stat64 *buf) __attribute__((weak));
-int lstat64(const char *path, struct stat64 *buf) {
+__attribute__((weak)) int lstat64(const char *path, struct stat64 *buf) {
   return __fd_lstat(path, buf);
 }
 
-int fstat64(int fd, struct stat64 *buf) __attribute__((weak));
-int fstat64(int fd, struct stat64 *buf) {
+__attribute__((weak)) int fstat64(int fd, struct stat64 *buf) {
   return __fd_fstat(fd, buf);
 }
diff --git a/test/regression/2007-08-16-invalid-constant-value.c b/test/regression/2007-08-16-invalid-constant-value.c
index 75f87fe4..ea0a5fee 100644
--- a/test/regression/2007-08-16-invalid-constant-value.c
+++ b/test/regression/2007-08-16-invalid-constant-value.c
@@ -1,7 +1,7 @@
 // RUN: rm -f %t4.out %t4.err %t4.log
 // RUN: %llvmgcc %s -emit-llvm -O2 -c -o %t1.bc
 // RUN: llvm-as -f %p/../Feature/_utils._ll -o %t2.bc
-// RUN: llvm-ld -disable-opt %t1.bc %t2.bc -o %t3
+// RUN: llvm-link %t1.bc %t2.bc -o %t3.bc
 // RUN: %klee %t3.bc
 
 #include <assert.h>
diff --git a/tools/klee/main.cpp b/tools/klee/main.cpp
index 79f29d2d..92e4df67 100644
--- a/tools/klee/main.cpp
+++ b/tools/klee/main.cpp
@@ -303,7 +303,11 @@ KleeHandler::KleeHandler(int argc, char **argv)
   }
   
   sys::Path p(theDir);
+#if LLVM_VERSION_CODE < LLVM_VERSION(3, 1)
   if (!p.isAbsolute()) {
+#else
+  if (!sys::path::is_absolute(p.c_str())) {
+#endif
     sys::Path cwd = sys::Path::GetCurrentDirectory();
     cwd.appendComponent(theDir);
     p = cwd;
@@ -600,7 +604,11 @@ static void parseArguments(int argc, char **argv) {
     argArray[i] = arguments[i-1].c_str();
   }
 
+#if LLVM_VERSION_CODE >= LLVM_VERSION(3, 2)
+  cl::ParseCommandLineOptions(numArgs, (const char**) argArray, " klee\n");
+#else
   cl::ParseCommandLineOptions(numArgs, (char**) argArray, " klee\n");
+#endif
   delete[] argArray;
 }