diff options
-rw-r--r-- | .gitignore | 16 | ||||
-rw-r--r-- | Makefile.rules | 2 | ||||
-rw-r--r-- | include/klee/Expr.h | 2 | ||||
-rw-r--r-- | include/klee/Internal/ADT/MapOfSets.h | 1 | ||||
-rw-r--r-- | lib/Core/Executor.cpp | 17 | ||||
-rw-r--r-- | lib/Core/StatsTracker.cpp | 11 | ||||
-rw-r--r-- | lib/Expr/Expr.cpp | 2 | ||||
-rw-r--r-- | lib/Expr/Lexer.cpp | 2 | ||||
-rw-r--r-- | lib/Module/KModule.cpp | 2 | ||||
-rw-r--r-- | lib/Solver/STPBuilder.cpp | 2 | ||||
-rw-r--r-- | runtime/POSIX/fd_32.c | 15 | ||||
-rw-r--r-- | test/regression/2007-08-16-invalid-constant-value.c | 2 | ||||
-rw-r--r-- | tools/klee/main.cpp | 8 |
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; } |