@@ -222,6 +222,27 @@ TEST_CASE(
222222 REQUIRE_THROWS (test.convert (or_exprt{{true_exprt{}}}));
223223}
224224
225+ TEST_CASE (
226+ " expr to smt conversion for \" is_invalid_pointer\" operator" ,
227+ " [core][smt2_incremental]" )
228+ {
229+ const std::size_t object_bits = config.bv_encoding .object_bits ;
230+ const auto test =
231+ expr_to_smt_conversion_test_environmentt::make (test_archt::x86_64);
232+ const pointer_typet pointer_type = ::pointer_type (void_type ());
233+ const std::size_t pointer_width = pointer_type.get_width ();
234+ const constant_exprt invalid_ptr{
235+ integer2bvrep (1ul << (pointer_width - object_bits), pointer_width),
236+ pointer_type};
237+ const is_invalid_pointer_exprt is_invalid_ptr{invalid_ptr};
238+ const smt_termt expected_smt_term = smt_core_theoryt::equal (
239+ smt_bit_vector_constant_termt{1 , config.bv_encoding .object_bits },
240+ smt_bit_vector_theoryt::extract (
241+ pointer_width - 1 ,
242+ pointer_width - object_bits)(test.convert (invalid_ptr)));
243+ CHECK (test.convert (is_invalid_ptr) == expected_smt_term);
244+ }
245+
225246TEST_CASE (
226247 " expr to smt conversion for \" xor\" operator" ,
227248 " [core][smt2_incremental]" )
@@ -1358,20 +1379,20 @@ TEST_CASE(
13581379 {
13591380 config.bv_encoding .object_bits = 8 ;
13601381 const auto converted = test.convert (address_of_foo);
1361- CHECK (test.object_map .at (foo).unique_id == 1 );
1382+ CHECK (test.object_map .at (foo).unique_id == 2 );
13621383 CHECK (
13631384 converted == smt_bit_vector_theoryt::concat (
1364- smt_bit_vector_constant_termt{1 , 8 },
1385+ smt_bit_vector_constant_termt{2 , 8 },
13651386 smt_bit_vector_constant_termt{0 , 56 }));
13661387 }
13671388 SECTION (" 16 object bits" )
13681389 {
13691390 config.bv_encoding .object_bits = 16 ;
13701391 const auto converted = test.convert (address_of_foo);
1371- CHECK (test.object_map .at (foo).unique_id == 1 );
1392+ CHECK (test.object_map .at (foo).unique_id == 2 );
13721393 CHECK (
13731394 converted == smt_bit_vector_theoryt::concat (
1374- smt_bit_vector_constant_termt{1 , 16 },
1395+ smt_bit_vector_constant_termt{2 , 16 },
13751396 smt_bit_vector_constant_termt{0 , 48 }));
13761397 }
13771398 }
@@ -1429,15 +1450,15 @@ TEST_CASE(
14291450 track_expression_objects (comparison, ns, test.object_map );
14301451 INFO (" Expression " + comparison.pretty (1 , 0 ));
14311452 const auto converted = test.convert (comparison);
1432- CHECK (test.object_map .at (foo).unique_id == 2 );
1433- CHECK (test.object_map .at (bar).unique_id == 1 );
1453+ CHECK (test.object_map .at (foo).unique_id == 3 );
1454+ CHECK (test.object_map .at (bar).unique_id == 2 );
14341455 CHECK (
14351456 converted == smt_core_theoryt::distinct (
14361457 smt_bit_vector_theoryt::concat (
1437- smt_bit_vector_constant_termt{2 , 8 },
1458+ smt_bit_vector_constant_termt{3 , 8 },
14381459 smt_bit_vector_constant_termt{0 , 56 }),
14391460 smt_bit_vector_theoryt::concat (
1440- smt_bit_vector_constant_termt{1 , 8 },
1461+ smt_bit_vector_constant_termt{2 , 8 },
14411462 smt_bit_vector_constant_termt{0 , 56 })));
14421463 }
14431464}
@@ -1543,7 +1564,7 @@ TEST_CASE(
15431564 const object_size_exprt object_size{
15441565 address_of_exprt{foo}, unsignedbv_typet{64 }};
15451566 track_expression_objects (object_size, ns, test.object_map );
1546- const auto foo_id = 1 ;
1567+ const auto foo_id = 2 ;
15471568 CHECK (test.object_map .at (foo).unique_id == foo_id);
15481569 const auto object_bits = config.bv_encoding .object_bits ;
15491570 const auto object = smt_bit_vector_constant_termt{foo_id, object_bits};
0 commit comments