From 6e0209e74ef814aa27af2add01d22284817c3d73 Mon Sep 17 00:00:00 2001 From: David Laprell Date: Tue, 14 Jan 2020 12:29:06 +0100 Subject: fix: fabs() working on the wrong argument --- lib/Core/Executor.cpp | 2 +- test/regression/2020-01-14-fabs-compare.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/regression/2020-01-14-fabs-compare.c diff --git a/lib/Core/Executor.cpp b/lib/Core/Executor.cpp index 48252dbd..7fac4fa4 100644 --- a/lib/Core/Executor.cpp +++ b/lib/Core/Executor.cpp @@ -1420,7 +1420,7 @@ void Executor::executeCall(ExecutionState &state, KInstruction *ki, Function *f, break; case Intrinsic::fabs: { ref arg = - toConstant(state, eval(ki, 0, state).value, "floating point"); + toConstant(state, arguments[0], "floating point"); if (!fpWidthToSemantics(arg->getWidth())) return terminateStateOnExecError( state, "Unsupported intrinsic llvm.fabs call"); diff --git a/test/regression/2020-01-14-fabs-compare.c b/test/regression/2020-01-14-fabs-compare.c new file mode 100644 index 00000000..563a6609 --- /dev/null +++ b/test/regression/2020-01-14-fabs-compare.c @@ -0,0 +1,16 @@ +// RUN: %clang %s -emit-llvm %O0opt -g -c -o %t.bc +// RUN: rm -rf %t.klee-out +// RUN: %klee --exit-on-error --output-dir=%t.klee-out %t.bc + +#include +#include + +int main(void) { + long double a = 0.25; + long double b = -a; + + long double b_abs = fabsl(b); + + assert(a == b_abs); + return 0; +} -- cgit 1.4.1