CBMC
bv_pointers.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_SOLVERS_FLATTENING_BV_POINTERS_H
11 #define CPROVER_SOLVERS_FLATTENING_BV_POINTERS_H
12 
13 #include <util/nodiscard.h>
14 
15 #include "boolbv.h"
16 #include "pointer_logic.h"
17 
18 class bv_pointerst:public boolbvt
19 {
20 public:
22  const namespacet &,
23  propt &,
25  bool get_array_constraints = false);
26 
27  void finish_eager_conversion() override;
28 
30  endianness_map(const typet &, bool little_endian) const override;
31 
32 protected:
34 
35  std::size_t get_object_width(const pointer_typet &) const;
36  std::size_t get_offset_width(const pointer_typet &) const;
37  std::size_t get_address_width(const pointer_typet &) const;
38 
39  // NOLINTNEXTLINE(readability/identifiers)
40  typedef boolbvt SUB;
41 
42  NODISCARD
43  bvt encode(const mp_integer &object, const pointer_typet &) const;
44 
45  virtual bvt convert_pointer_type(const exprt &);
46 
47  NODISCARD
48  virtual bvt add_addr(const exprt &);
49 
50  // overloading
51  literalt convert_rest(const exprt &) override;
52  bvt convert_bitvector(const exprt &) override; // no cache
53 
54  exprt
55  bv_get_rec(const exprt &, const bvt &, std::size_t offset) const override;
56 
57  NODISCARD
59 
60  NODISCARD
61  bvt offset_arithmetic(const pointer_typet &, const bvt &, const mp_integer &);
62  NODISCARD
64  const pointer_typet &,
65  const bvt &,
66  const mp_integer &factor,
67  const exprt &index);
68  NODISCARD
70  const pointer_typet &,
71  const bvt &,
72  const mp_integer &factor,
73  const bvt &index_bv);
74 
75  struct postponedt
76  {
77  bvt bv, op;
79 
80  postponedt(bvt _bv, bvt _op, exprt _expr)
81  : bv(std::move(_bv)), op(std::move(_op)), expr(std::move(_expr))
82  {
83  }
84  };
85 
86  typedef std::list<postponedt> postponed_listt;
88 
89  void do_postponed(const postponedt &postponed);
90 
96  bvt object_literals(const bvt &bv, const pointer_typet &type) const;
97 
103  bvt offset_literals(const bvt &bv, const pointer_typet &type) const;
104 
110  static bvt object_offset_encoding(const bvt &object, const bvt &offset);
111 };
112 
113 #endif // CPROVER_SOLVERS_FLATTENING_BV_POINTERS_H
bv_pointerst::encode
bvt encode(const mp_integer &object, const pointer_typet &) const
Definition: bv_pointers.cpp:806
bv_pointerst::postponedt::postponedt
postponedt(bvt _bv, bvt _op, exprt _expr)
Definition: bv_pointers.h:80
bv_pointerst::finish_eager_conversion
void finish_eager_conversion() override
Definition: bv_pointers.cpp:987
mp_integer
BigInt mp_integer
Definition: smt_terms.h:17
bv_pointerst::bv_pointerst
bv_pointerst(const namespacet &, propt &, message_handlert &, bool get_array_constraints=false)
Definition: bv_pointers.cpp:210
bv_pointerst::convert_bitvector
bvt convert_bitvector(const exprt &) override
Converts an expression into its gate-level representation and returns a vector of literals correspond...
Definition: bv_pointers.cpp:604
NODISCARD
#define NODISCARD
Definition: nodiscard.h:22
bv_pointerst::postponedt::op
bvt op
Definition: bv_pointers.h:77
bv_pointerst::bv_get_rec
exprt bv_get_rec(const exprt &, const bvt &, std::size_t offset) const override
Definition: bv_pointers.cpp:769
bv_pointerst::object_offset_encoding
static bvt object_offset_encoding(const bvt &object, const bvt &offset)
Construct a pointer encoding from given encodings of object and offset.
Definition: bv_pointers.cpp:112
typet
The type of an expression, extends irept.
Definition: type.h:28
bvt
std::vector< literalt > bvt
Definition: literal.h:201
bv_pointerst::postponed_list
postponed_listt postponed_list
Definition: bv_pointers.h:87
bv_pointerst::postponedt::expr
exprt expr
Definition: bv_pointers.h:78
nodiscard.h
bv_pointerst::object_literals
bvt object_literals(const bvt &bv, const pointer_typet &type) const
Given a pointer encoded in bv, extract the literals identifying the object that the pointer points to...
Definition: bv_pointers.cpp:92
bv_pointerst::do_postponed
void do_postponed(const postponedt &postponed)
Definition: bv_pointers.cpp:891
exprt
Base class for all expressions.
Definition: expr.h:55
bv_pointerst::convert_address_of_rec
optionalt< bvt > convert_address_of_rec(const exprt &)
Definition: bv_pointers.cpp:220
pointer_logict
Definition: pointer_logic.h:22
bv_pointerst::postponed_listt
std::list< postponedt > postponed_listt
Definition: bv_pointers.h:86
bv_pointerst::SUB
boolbvt SUB
Definition: bv_pointers.h:40
bv_pointerst::endianness_map
endianness_mapt endianness_map(const typet &, bool little_endian) const override
Definition: bv_pointers.cpp:68
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
pointer_logic.h
bv_pointerst::add_addr
virtual bvt add_addr(const exprt &)
Definition: bv_pointers.cpp:873
bv_pointerst::pointer_logic
pointer_logict pointer_logic
Definition: bv_pointers.h:33
bv_pointerst
Definition: bv_pointers.h:18
message_handlert
Definition: message.h:27
bv_pointerst::offset_arithmetic
bvt offset_arithmetic(const pointer_typet &, const bvt &, const mp_integer &)
Definition: bv_pointers.cpp:818
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
bv_pointerst::get_address_width
std::size_t get_address_width(const pointer_typet &) const
Definition: bv_pointers.cpp:87
bv_pointerst::get_object_width
std::size_t get_object_width(const pointer_typet &) const
Definition: bv_pointers.cpp:73
propt
TO_BE_DOCUMENTED.
Definition: prop.h:22
bv_pointerst::postponedt
Definition: bv_pointers.h:75
bv_pointerst::convert_rest
literalt convert_rest(const exprt &) override
Definition: bv_pointers.cpp:122
literalt
Definition: literal.h:25
bv_pointerst::get_offset_width
std::size_t get_offset_width(const pointer_typet &) const
Definition: bv_pointers.cpp:79
endianness_mapt
Maps a big-endian offset to a little-endian offset.
Definition: endianness_map.h:30
boolbvt
Definition: boolbv.h:46
boolbv.h
bv_pointerst::offset_literals
bvt offset_literals(const bvt &bv, const pointer_typet &type) const
Given a pointer encoded in bv, extract the literals representing the offset into an object that the p...
Definition: bv_pointers.cpp:103
bv_pointerst::convert_pointer_type
virtual bvt convert_pointer_type(const exprt &)
Definition: bv_pointers.cpp:353
pointer_typet
The pointer type These are both 'bitvector_typet' (they have a width) and 'type_with_subtypet' (they ...
Definition: pointer_expr.h:23
arrayst::get_array_constraints
bool get_array_constraints
Definition: arrays.h:113
bv_pointerst::postponedt::bv
bvt bv
Definition: bv_pointers.h:77