Skip to content

Commit bd75459

Browse files
committed
constant pointer to_predicate
1 parent cf1fcee commit bd75459

File tree

5 files changed

+71
-0
lines changed

5 files changed

+71
-0
lines changed

src/analyses/variable-sensitivity/constant_pointer_abstract_object.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -388,3 +388,9 @@ exprt constant_pointer_abstract_objectt::ptr_comparison_expr(
388388
return true_exprt();
389389
return nil_exprt();
390390
}
391+
392+
exprt constant_pointer_abstract_objectt::to_predicate_internal(
393+
const exprt &name) const
394+
{
395+
return equal_exprt(name, value_stack.to_expression());
396+
}

src/analyses/variable-sensitivity/constant_pointer_abstract_object.h

+2
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ class constant_pointer_abstract_objectt : public abstract_pointer_objectt
145145

146146
CLONE
147147

148+
exprt to_predicate_internal(const exprt &name) const override;
149+
148150
private:
149151
bool same_target(abstract_object_pointert other) const;
150152
exprt offset() const;

unit/Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ SRC += analyses/ai/ai.cpp \
2020
analyses/variable-sensitivity/constant_abstract_value/meet.cpp \
2121
analyses/variable-sensitivity/constant_abstract_value/merge.cpp \
2222
analyses/variable-sensitivity/constant_abstract_value/to_predicate.cpp \
23+
analyses/variable-sensitivity/constant_pointer_abstract_object/to_predicate.cpp \
2324
analyses/variable-sensitivity/full_array_abstract_object/array_builder.cpp \
2425
analyses/variable-sensitivity/full_array_abstract_object/merge.cpp \
2526
analyses/variable-sensitivity/full_array_abstract_object/to_predicate.cpp \
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
analyses
2+
testing-utils
3+
util
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*******************************************************************\
2+
3+
Module: Tests for constant_pointer_abstract_objectt::to_predicate
4+
5+
Author: Jez Higgins
6+
7+
\*******************************************************************/
8+
9+
#include <analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
10+
#include <analyses/variable-sensitivity/variable_sensitivity_test_helpers.h>
11+
#include <testing-utils/use_catch.h>
12+
#include <util/arith_tools.h>
13+
#include <util/bitvector_types.h>
14+
#include <util/pointer_expr.h>
15+
16+
SCENARIO(
17+
"constant_pointer_abstract_object to predicate",
18+
"[core][analyses][variable-sensitivity][constant_pointer_abstract_object][to_"
19+
"predicate]")
20+
{
21+
const auto int_type = signedbv_typet(32);
22+
const auto ptr_type = pointer_typet(int_type, 32);
23+
const auto val2_symbol = symbol_exprt(dstringt("val2"), int_type);
24+
25+
const auto x_name = symbol_exprt(dstringt("x"), int_type);
26+
27+
auto config = vsd_configt::constant_domain();
28+
config.context_tracking.data_dependency_context = false;
29+
config.context_tracking.last_write_context = false;
30+
auto object_factory =
31+
variable_sensitivity_object_factoryt::configured_with(config);
32+
abstract_environmentt environment{object_factory};
33+
environment.make_top();
34+
symbol_tablet symbol_table;
35+
namespacet ns(symbol_table);
36+
37+
GIVEN("constant_pointer_abstract_object")
38+
{
39+
WHEN("it is TOP")
40+
{
41+
auto obj = std::make_shared<constant_pointer_abstract_objectt>(
42+
ptr_type, true, false);
43+
THEN_PREDICATE(obj, "TRUE");
44+
}
45+
WHEN("it is BOTTOM")
46+
{
47+
auto obj = std::make_shared<constant_pointer_abstract_objectt>(
48+
ptr_type, false, true);
49+
THEN_PREDICATE(obj, "FALSE");
50+
}
51+
WHEN("points to a &symbol")
52+
{
53+
const auto address_of = address_of_exprt(val2_symbol);
54+
auto obj = std::make_shared<constant_pointer_abstract_objectt>(
55+
address_of, environment, ns);
56+
THEN_PREDICATE(obj, "x == &val2");
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)