Skip to content

Commit b4033fb

Browse files
authored
Merge pull request #7386 from tautschnig/cleanup/good-pointer
Remove good_pointer, good_pointer_def
2 parents 8a1f6ec + 6d59ba9 commit b4033fb

9 files changed

+10
-52
lines changed

src/ansi-c/expr2c.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4001,7 +4001,6 @@ optionalt<std::string> expr2ct::convert_function(const exprt &src)
40014001
{ID_gcc_builtin_va_arg, "gcc_builtin_va_arg"},
40024002
{ID_get_may, CPROVER_PREFIX "get_may"},
40034003
{ID_get_must, CPROVER_PREFIX "get_must"},
4004-
{ID_good_pointer, "GOOD_POINTER"},
40054004
{ID_ieee_float_equal, "IEEE_FLOAT_EQUAL"},
40064005
{ID_ieee_float_notequal, "IEEE_FLOAT_NOTEQUAL"},
40074006
{ID_infinity, "INFINITY"},

src/goto-instrument/contracts/utils.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Date: September 2021
1616
#include <util/mathematical_expr.h>
1717
#include <util/message.h>
1818
#include <util/pointer_expr.h>
19+
#include <util/pointer_offset_size.h>
1920
#include <util/pointer_predicates.h>
2021
#include <util/simplify_expr.h>
2122
#include <util/symbol.h>
@@ -85,9 +86,13 @@ exprt all_dereferences_are_valid(const exprt &expr, const namespacet &ns)
8586
{
8687
exprt::operandst validity_checks;
8788

88-
if(expr.id() == ID_dereference)
89-
validity_checks.push_back(
90-
good_pointer_def(to_dereference_expr(expr).pointer(), ns));
89+
if(auto deref = expr_try_dynamic_cast<dereference_exprt>(expr))
90+
{
91+
const auto size_of_expr_opt = size_of_expr(expr.type(), ns);
92+
CHECK_RETURN(size_of_expr_opt.has_value());
93+
94+
validity_checks.push_back(r_ok_exprt{deref->pointer(), *size_of_expr_opt});
95+
}
9196

9297
for(const auto &op : expr.operands())
9398
validity_checks.push_back(all_dereferences_are_valid(op, ns));

src/goto-instrument/contracts/utils.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ class havoc_assigns_targetst : public havoc_if_validt
6262
///
6363
/// This function generates a formula:
6464
///
65-
/// good_pointer_def(pexpr_1, ns) &&
66-
/// good_pointer_def(pexpr_2, n2) &&
65+
/// r_ok_exprt(pexpr_1, sizeof(*pexpr_1)) &&
66+
/// r_ok_exprt(pexpr_2, sizeof(*pexpr_1)) &&
6767
/// ...
6868
///
6969
/// over all dereferenced pointer expressions *(pexpr_1), *(pexpr_2), ...

src/util/irep_ids.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,6 @@ IREP_ID_TWO(C_dynamic, #dynamic)
461461
IREP_ID_ONE(pointer_in_range)
462462
IREP_ID_ONE(object_size)
463463
IREP_ID_ONE(separate)
464-
IREP_ID_ONE(good_pointer)
465464
IREP_ID_ONE(live_object)
466465
IREP_ID_ONE(writeable_object)
467466
IREP_ID_ONE(integer_address)

src/util/pointer_predicates.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -56,34 +56,6 @@ exprt dead_object(const exprt &pointer, const namespacet &ns)
5656
return same_object(pointer, deallocated_symbol.symbol_expr());
5757
}
5858

59-
exprt good_pointer(const exprt &pointer)
60-
{
61-
return unary_exprt(ID_good_pointer, pointer, bool_typet());
62-
}
63-
64-
exprt good_pointer_def(
65-
const exprt &pointer,
66-
const namespacet &ns)
67-
{
68-
const pointer_typet &pointer_type = to_pointer_type(pointer.type());
69-
const typet &dereference_type = pointer_type.base_type();
70-
71-
const auto size_of_expr_opt = size_of_expr(dereference_type, ns);
72-
CHECK_RETURN(size_of_expr_opt.has_value());
73-
74-
const exprt good_dynamic = not_exprt{deallocated(pointer, ns)};
75-
76-
const not_exprt not_null(null_object(pointer));
77-
78-
const not_exprt not_invalid{is_invalid_pointer_exprt{pointer}};
79-
80-
const and_exprt good_bounds{
81-
not_exprt{object_lower_bound(pointer, nil_exprt())},
82-
not_exprt{object_upper_bound(pointer, size_of_expr_opt.value())}};
83-
84-
return and_exprt(not_null, not_invalid, good_dynamic, good_bounds);
85-
}
86-
8759
exprt null_object(const exprt &pointer)
8860
{
8961
null_pointer_exprt null_pointer(to_pointer_type(pointer.type()));

src/util/pointer_predicates.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ exprt dead_object(const exprt &pointer, const namespacet &);
2222
exprt pointer_offset(const exprt &pointer);
2323
exprt pointer_object(const exprt &pointer);
2424
exprt object_size(const exprt &pointer);
25-
exprt good_pointer(const exprt &pointer);
26-
exprt good_pointer_def(const exprt &pointer, const namespacet &);
2725
exprt null_object(const exprt &pointer);
2826

2927
exprt integer_address(const exprt &pointer);

src/util/simplify_expr.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2734,10 +2734,6 @@ simplify_exprt::resultt<> simplify_exprt::simplify_node(exprt node)
27342734
{
27352735
r = simplify_object_size(*object_size);
27362736
}
2737-
else if(expr.id()==ID_good_pointer)
2738-
{
2739-
r = simplify_good_pointer(to_unary_expr(expr));
2740-
}
27412737
else if(expr.id()==ID_div)
27422738
{
27432739
r = simplify_div(to_div_expr(expr));

src/util/simplify_expr_class.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ class simplify_exprt
180180
NODISCARD resultt<> simplify_object_size(const object_size_exprt &);
181181
NODISCARD resultt<> simplify_is_dynamic_object(const unary_exprt &);
182182
NODISCARD resultt<> simplify_is_invalid_pointer(const unary_exprt &);
183-
NODISCARD resultt<> simplify_good_pointer(const unary_exprt &);
184183
NODISCARD resultt<> simplify_object(const exprt &);
185184
NODISCARD resultt<> simplify_unary_minus(const unary_minus_exprt &);
186185
NODISCARD resultt<> simplify_unary_plus(const unary_plus_exprt &);

src/util/simplify_expr_pointer.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -692,13 +692,3 @@ simplify_exprt::simplify_object_size(const object_size_exprt &expr)
692692
else
693693
return std::move(new_expr);
694694
}
695-
696-
simplify_exprt::resultt<>
697-
simplify_exprt::simplify_good_pointer(const unary_exprt &expr)
698-
{
699-
// we expand the definition
700-
exprt def = good_pointer_def(expr.op(), ns);
701-
702-
// recursive call
703-
return changed(simplify_rec(def));
704-
}

0 commit comments

Comments
 (0)