Skip to content

Commit 780d6cc

Browse files
committed
Implement get of array index values in smt decision procedure
So that writes to arrays can be shown in traces.
1 parent bbf7a82 commit 780d6cc

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/solvers/smt2_incremental/smt2_incremental_decision_procedure.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -399,9 +399,24 @@ exprt smt2_incremental_decision_proceduret::get(const exprt &expr) const
399399
log.conditional_output(log.debug(), [&](messaget::mstreamt &debug) {
400400
debug << "`get` - \n " + expr.pretty(2, 0) << messaget::eom;
401401
});
402-
optionalt<smt_termt> descriptor =
403-
get_identifier(expr, expression_handle_identifiers, expression_identifiers);
404-
402+
auto descriptor = [&]() -> optionalt<smt_termt> {
403+
if(const auto index_expr = expr_try_dynamic_cast<index_exprt>(expr))
404+
{
405+
const auto array = get_identifier(
406+
index_expr->array(),
407+
expression_handle_identifiers,
408+
expression_identifiers);
409+
const auto index = get_identifier(
410+
index_expr->index(),
411+
expression_handle_identifiers,
412+
expression_identifiers);
413+
if(!array || !index)
414+
return {};
415+
return smt_array_theoryt::select(*array, *index);
416+
}
417+
return get_identifier(
418+
expr, expression_handle_identifiers, expression_identifiers);
419+
}();
405420
if(!descriptor)
406421
{
407422
if(gather_dependent_expressions(expr).empty())

0 commit comments

Comments
 (0)