Catch exception in Z3.

Note: This exception might not be the result of resource limitation,
it might also hint towards usage error.
This commit is contained in:
chriseth 2017-10-11 15:15:17 +02:00 committed by Alex Beregszaszi
parent a71c6faf0f
commit 153ae98878

View File

@ -73,28 +73,37 @@ void Z3Interface::addAssertion(Expression const& _expr)
pair<CheckResult, vector<string>> Z3Interface::check(vector<Expression> const& _expressionsToEvaluate) pair<CheckResult, vector<string>> Z3Interface::check(vector<Expression> const& _expressionsToEvaluate)
{ {
CheckResult result; CheckResult result;
switch (m_solver.check()) vector<string> values;
try
{ {
case z3::check_result::sat: switch (m_solver.check())
result = CheckResult::SATISFIABLE; {
break; case z3::check_result::sat:
case z3::check_result::unsat: result = CheckResult::SATISFIABLE;
result = CheckResult::UNSATISFIABLE; break;
break; case z3::check_result::unsat:
case z3::check_result::unknown: result = CheckResult::UNSATISFIABLE;
result = CheckResult::UNKNOWN; break;
break; case z3::check_result::unknown:
default: result = CheckResult::UNKNOWN;
solAssert(false, ""); break;
default:
solAssert(false, "");
}
if (result != CheckResult::UNSATISFIABLE)
{
z3::model m = m_solver.get_model();
for (Expression const& e: _expressionsToEvaluate)
values.push_back(toString(m.eval(toZ3Expr(e))));
}
}
catch (z3::exception const& _e)
{
result = CheckResult::ERROR;
values.clear();
} }
vector<string> values;
if (result != CheckResult::UNSATISFIABLE)
{
z3::model m = m_solver.get_model();
for (Expression const& e: _expressionsToEvaluate)
values.push_back(toString(m.eval(toZ3Expr(e))));
}
return make_pair(result, values); return make_pair(result, values);
} }