Skip to content

Commit 33058f0

Browse files
committed
X_ok(ς, p) --> p!=0
1 parent c15bb68 commit 33058f0

File tree

3 files changed

+32
-22
lines changed

3 files changed

+32
-22
lines changed

regression/cprover/cstrings/cstring_is_not_null.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
KNOWNBUG
1+
CORE
22
cstring_is_not_null.c
33

44
^EXIT=0$

regression/cprover/safety/r_ok4.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
KNOWNBUG
1+
CORE
22
r_ok4.c
33

44
^EXIT=0$

src/cprover/axioms.cpp

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -209,26 +209,36 @@ void axiomst::node(const exprt &src, decision_proceduret &dest)
209209
const auto &pointer = ok_expr.op1();
210210
const auto &size = ok_expr.op2();
211211

212-
// X_ok(p, s)
213-
// --> live_object(p) ∧ offset(p)≥0 ∧ offset(p)+s≤object_size(p)
214-
auto live_object =
215-
binary_predicate_exprt(state, ID_state_live_object, pointer);
216-
auto ssize_type = signed_size_type();
217-
auto offset = pointer_offset_exprt(pointer, ssize_type);
218-
auto offset_simplified =
219-
simplify_state_expr_node(offset, address_taken, ns);
220-
auto lower = binary_relation_exprt(
221-
offset_simplified, ID_ge, from_integer(0, ssize_type));
222-
auto object_size =
223-
binary_exprt(state, ID_state_object_size, pointer, ssize_type);
224-
auto size_casted = typecast_exprt::conditional_cast(size, ssize_type);
225-
auto upper = binary_relation_exprt(
226-
plus_exprt(offset_simplified, size_casted), ID_le, object_size);
227-
228-
auto instance =
229-
replace(implies_exprt(src, and_exprt(live_object, lower, upper)));
230-
std::cout << "AXIOMd: " << format(instance) << "\n";
231-
dest << instance;
212+
{
213+
// X_ok(p, s)
214+
// --> live_object(p) ∧ offset(p)≥0 ∧ offset(p)+s≤object_size(p)
215+
auto live_object =
216+
binary_predicate_exprt(state, ID_state_live_object, pointer);
217+
auto ssize_type = signed_size_type();
218+
auto offset = pointer_offset_exprt(pointer, ssize_type);
219+
auto offset_simplified =
220+
simplify_state_expr_node(offset, address_taken, ns);
221+
auto lower = binary_relation_exprt(
222+
offset_simplified, ID_ge, from_integer(0, ssize_type));
223+
auto object_size =
224+
binary_exprt(state, ID_state_object_size, pointer, ssize_type);
225+
auto size_casted = typecast_exprt::conditional_cast(size, ssize_type);
226+
auto upper = binary_relation_exprt(
227+
plus_exprt(offset_simplified, size_casted), ID_le, object_size);
228+
229+
auto instance =
230+
replace(implies_exprt(src, and_exprt(live_object, lower, upper)));
231+
std::cout << "AXIOMd: " << format(instance) << "\n";
232+
dest << instance;
233+
}
234+
235+
{
236+
// X_ok(ς, p) --> p!=0
237+
auto instance =
238+
replace(implies_exprt(src, not_exprt(null_pointer(pointer))));
239+
std::cout << "AXIOMe: " << format(instance) << "\n";
240+
dest << instance;
241+
}
232242
}
233243
}
234244

0 commit comments

Comments
 (0)