From 1b4671cbffd53ab27f48f30aae21da6d08242323 Mon Sep 17 00:00:00 2001 From: Frank Busse Date: Wed, 1 Nov 2017 14:40:09 +0000 Subject: klee_make_symbolic: warn on deprecated usage * terminates state instead of using assertion for illegal argument number * renames empty names to "unnamed" (otherwise test generation fails) * deprecates two argument version --- lib/Core/SpecialFunctionHandler.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/Core/SpecialFunctionHandler.cpp b/lib/Core/SpecialFunctionHandler.cpp index 88e0d1a0..1c2b245c 100644 --- a/lib/Core/SpecialFunctionHandler.cpp +++ b/lib/Core/SpecialFunctionHandler.cpp @@ -665,15 +665,22 @@ void SpecialFunctionHandler::handleMakeSymbolic(ExecutionState &state, std::vector > &arguments) { std::string name; - // FIXME: For backwards compatibility, we should eventually enforce the - // correct arguments. - if (arguments.size() == 2) { + // FIXME: For backwards compatibility. We should eventually enforce the + // correct arguments and types. + switch (arguments.size()) { + case 2: + klee_warning("klee_make_symbolic: deprecated number of arguments (2 instead of 3)"); + break; + case 3: + name = readStringAtAddress(state, arguments[2]); + break; + default: + executor.terminateStateOnError(state, "illegal number of arguments to klee_make_symbolic(void*, size_t, char*)", Executor::User); + return; + } + if (name.length() == 0) { name = "unnamed"; - } else { - // FIXME: Should be a user.err, not an assert. - assert(arguments.size()==3 && - "invalid number of arguments to klee_make_symbolic"); - name = readStringAtAddress(state, arguments[2]); + klee_warning("klee_make_symbolic: renamed empty name to \"unnamed\""); } Executor::ExactResolutionList rl; -- cgit 1.4.1