diff options
author | Luca Dariz <l.dariz@imamoter.cnr.t> | 2014-11-20 12:41:12 +0100 |
---|---|---|
committer | Cristian Cadar <c.cadar@imperial.ac.uk> | 2015-02-13 18:49:49 +0000 |
commit | 714dc22ccb12efdc203e8ce92d6e546ca9ffb157 (patch) | |
tree | cc31c6b8bb0d886d5c86eb93f1517cad8bc326de /lib/Core | |
parent | dbe13e13a215aa7212b5737dd8903699301a4940 (diff) | |
download | klee-714dc22ccb12efdc203e8ce92d6e546ca9ffb157.tar.gz |
refactor integer overflow detection, add signed int
Instead of checking for every possible casse which result in overflow, it is much simpler to perform the operation using integers with bigger dimension and check if the result overflow
Diffstat (limited to 'lib/Core')
-rw-r--r-- | lib/Core/SpecialFunctionHandler.cpp | 9 | ||||
-rw-r--r-- | lib/Core/SpecialFunctionHandler.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/Core/SpecialFunctionHandler.cpp b/lib/Core/SpecialFunctionHandler.cpp index 04a82cf7..f06ae4f5 100644 --- a/lib/Core/SpecialFunctionHandler.cpp +++ b/lib/Core/SpecialFunctionHandler.cpp @@ -112,6 +112,7 @@ static SpecialFunctionHandler::HandlerInfo handlerInfo[] = { add("__ubsan_handle_add_overflow", handleAddOverflow, false), add("__ubsan_handle_sub_overflow", handleSubOverflow, false), add("__ubsan_handle_mul_overflow", handleMulOverflow, false), + add("__ubsan_handle_divrem_overflow", handleDivRemOverflow, false), #undef addDNR #undef add @@ -736,3 +737,11 @@ void SpecialFunctionHandler::handleMulOverflow(ExecutionState &state, "overflow on unsigned multiplication", "overflow.err"); } + +void SpecialFunctionHandler::handleDivRemOverflow(ExecutionState &state, + KInstruction *target, + std::vector<ref<Expr> > &arguments) { + executor.terminateStateOnError(state, + "overflow on division or remainder", + "overflow.err"); +} diff --git a/lib/Core/SpecialFunctionHandler.h b/lib/Core/SpecialFunctionHandler.h index 601b149b..d52b8fc5 100644 --- a/lib/Core/SpecialFunctionHandler.h +++ b/lib/Core/SpecialFunctionHandler.h @@ -135,6 +135,7 @@ namespace klee { HANDLER(handleAddOverflow); HANDLER(handleMulOverflow); HANDLER(handleSubOverflow); + HANDLER(handleDivRemOverflow); #undef HANDLER }; } // End klee namespace |