Skip to content

Commit c6cfd6c

Browse files
committed
Send is_dynamic object declaration and defintion to solver
In preparation for calling the new function in the conversion of is_dynamic_object expressions to SMT terms.
1 parent 2304921 commit c6cfd6c

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

src/solvers/smt2_incremental/smt2_incremental_decision_procedure.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ smt2_incremental_decision_proceduret::smt2_incremental_decision_proceduret(
255255
smt_set_option_commandt{smt_option_produce_modelst{true}});
256256
solver_process->send(smt_set_logic_commandt{smt_logic_allt{}});
257257
solver_process->send(object_size_function.declaration);
258+
solver_process->send(is_dynamic_object_function.declaration);
258259
}
259260

260261
void smt2_incremental_decision_proceduret::ensure_handle_for_expr_defined(
@@ -561,6 +562,8 @@ void smt2_incremental_decision_proceduret::define_object_sizes()
561562
define_dependent_functions(object.size);
562563
solver_process->send(object_size_function.make_definition(
563564
object.unique_id, convert_expr_to_smt(object.size)));
565+
solver_process->send(is_dynamic_object_function.make_definition(
566+
object.unique_id, object.is_dynamic));
564567
}
565568
}
566569

src/solvers/smt2_incremental/smt2_incremental_decision_procedure.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <solvers/smt2_incremental/ast/smt_terms.h>
1313
#include <solvers/smt2_incremental/object_tracking.h>
14+
#include <solvers/smt2_incremental/smt_is_dynamic_object.h>
1415
#include <solvers/smt2_incremental/smt_object_size.h>
1516
#include <solvers/smt2_incremental/type_size_mapping.h>
1617
#include <solvers/stack_decision_procedure.h>
@@ -159,6 +160,7 @@ class smt2_incremental_decision_proceduret final
159160
/// stateful because it depends on the configuration of the number of object
160161
/// bits and how many bits wide the size type is configured to be.
161162
smt_object_sizet object_size_function;
163+
smt_is_dynamic_objectt is_dynamic_object_function;
162164
/// Precalculated type sizes used for pointer arithmetic.
163165
type_size_mapt pointer_sizes_map;
164166
};

unit/solvers/smt2_incremental/smt2_incremental_decision_procedure.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ struct decision_procedure_test_environmentt final
113113
std::vector<smt_commandt> sent_commands;
114114
null_message_handlert message_handler;
115115
smt_object_sizet object_size_function;
116+
smt_is_dynamic_objectt is_dynamic_object_function;
116117
smt2_incremental_decision_proceduret procedure{
117118
ns,
118119
util_make_unique<smt_mock_solver_processt>(
@@ -177,7 +178,8 @@ TEST_CASE(
177178
std::vector<smt_commandt>{
178179
smt_set_option_commandt{smt_option_produce_modelst{true}},
179180
smt_set_logic_commandt{smt_logic_allt{}},
180-
test.object_size_function.declaration});
181+
test.object_size_function.declaration,
182+
test.is_dynamic_object_function.declaration});
181183
test.sent_commands.clear();
182184
SECTION("Set symbol to true.")
183185
{
@@ -464,6 +466,10 @@ TEST_CASE(
464466
const auto invalid_pointer_object_size_definition =
465467
test.object_size_function.make_definition(
466468
1, smt_bit_vector_constant_termt{0, 32});
469+
const auto null_object_dynamic_definition =
470+
test.is_dynamic_object_function.make_definition(0, false);
471+
const auto invalid_pointer_object_dynamic_definition =
472+
test.is_dynamic_object_function.make_definition(1, false);
467473
const symbolt foo = make_test_symbol("foo", signedbv_typet{16});
468474
const smt_identifier_termt foo_term{"foo", smt_bit_vector_sortt{16}};
469475
const exprt expr_42 = from_integer({42}, signedbv_typet{16});
@@ -480,6 +486,8 @@ TEST_CASE(
480486
smt_assert_commandt{smt_core_theoryt::equal(foo_term, term_42)},
481487
invalid_pointer_object_size_definition,
482488
null_object_size_definition,
489+
null_object_dynamic_definition,
490+
invalid_pointer_object_dynamic_definition,
483491
smt_check_sat_commandt{}};
484492
REQUIRE(
485493
(test.sent_commands.size() == expected_commands.size() &&

0 commit comments

Comments
 (0)