diff options
author | Cristian Cadar <cristic@cs.stanford.edu> | 2012-05-25 09:42:42 +0000 |
---|---|---|
committer | Cristian Cadar <cristic@cs.stanford.edu> | 2012-05-25 09:42:42 +0000 |
commit | 0957ad0803f472bcb2dc8a5f64aa5583d1d2c6fe (patch) | |
tree | c64172b958330d19b1588b04df9e1eb0b7d1c5a5 | |
parent | 461594277fe53d64ab89b02856232276916379d6 (diff) | |
download | klee-0957ad0803f472bcb2dc8a5f64aa5583d1d2c6fe.tar.gz |
Patch by Paul Marinescu that makes KLEE gracefully fail on assembly code.
Includes test case. git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@157463 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Core/Executor.cpp | 7 | ||||
-rw-r--r-- | test/regression/2012-05-13-asm-causes-aborts.c | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp index 917a746d..c6bd379a 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp @@ -1592,6 +1592,10 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { if (f && isDebugIntrinsic(f, kmodule)) break; + if (isa<InlineAsm>(fp)) { + terminateStateOnExecError(state, "inline assembly is unsupported"); + break; + } // evaluate arguments std::vector< ref<Expr> > arguments; arguments.reserve(numArgs); @@ -1633,9 +1637,6 @@ void Executor::executeInstruction(ExecutionState &state, KInstruction *ki) { i++; } - } else if (isa<InlineAsm>(fp)) { - terminateStateOnExecError(state, "inline assembly is unsupported"); - break; } executeCall(state, ki, f, arguments); diff --git a/test/regression/2012-05-13-asm-causes-aborts.c b/test/regression/2012-05-13-asm-causes-aborts.c new file mode 100644 index 00000000..6622d02b --- /dev/null +++ b/test/regression/2012-05-13-asm-causes-aborts.c @@ -0,0 +1,8 @@ +// RUN: %llvmgcc %s -emit-llvm -O0 -c -o %t1.bc +// RUN: %klee %t1.bc + +int main(int argc, char *argv[]){ + __asm__ __volatile__ ("movl %eax, %eax"); + return 0; +} + |