Skip to content

Commit bf40378

Browse files
committed
pointer_logic: use mp_integer for numbering objects
Replacing std::size_t by mp_integer makes the code more platform-independent and easier to use as overflow is no longer a concern.
1 parent 26d1746 commit bf40378

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

src/solvers/flattening/pointer_logic.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ bool pointer_logict::is_dynamic_object(const exprt &expr) const
3131
SYMEX_DYNAMIC_PREFIX));
3232
}
3333

34-
void pointer_logict::get_dynamic_objects(std::vector<std::size_t> &o) const
34+
void pointer_logict::get_dynamic_objects(std::vector<mp_integer> &o) const
3535
{
3636
o.clear();
37-
std::size_t nr=0;
37+
mp_integer nr = 0;
3838

3939
for(auto it = objects.cbegin(); it != objects.cend(); ++it, ++nr)
4040
if(is_dynamic_object(*it))
4141
o.push_back(nr);
4242
}
4343

44-
std::size_t pointer_logict::add_object(const exprt &expr)
44+
mp_integer pointer_logict::add_object(const exprt &expr)
4545
{
4646
// remove any index/member
4747

@@ -58,11 +58,10 @@ std::size_t pointer_logict::add_object(const exprt &expr)
5858
}
5959

6060
exprt pointer_logict::pointer_expr(
61-
std::size_t object,
61+
const mp_integer &object,
6262
const pointer_typet &type) const
6363
{
64-
pointert pointer(object, 0);
65-
return pointer_expr(pointer, type);
64+
return pointer_expr({object, 0}, type);
6665
}
6766

6867
exprt pointer_logict::pointer_expr(
@@ -89,10 +88,11 @@ exprt pointer_logict::pointer_expr(
8988

9089
if(pointer.object>=objects.size())
9190
{
92-
return constant_exprt("INVALID-" + std::to_string(pointer.object), type);
91+
return constant_exprt("INVALID-" + integer2string(pointer.object), type);
9392
}
9493

95-
const exprt &object_expr=objects[pointer.object];
94+
const exprt &object_expr =
95+
objects[numeric_cast_v<std::size_t>(pointer.object)];
9696

9797
typet subtype = type.base_type();
9898
// This is a gcc extension.

src/solvers/flattening/pointer_logic.h

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ class pointer_logict
2727

2828
struct pointert
2929
{
30-
std::size_t object;
31-
mp_integer offset;
30+
mp_integer object, offset;
3231

3332
pointert()
3433
{
3534
}
3635

37-
pointert(std::size_t _obj, mp_integer _off):object(_obj), offset(_off)
36+
pointert(mp_integer _obj, mp_integer _off)
37+
: object(std::move(_obj)), offset(std::move(_off))
3838
{
3939
}
4040
};
@@ -45,34 +45,32 @@ class pointer_logict
4545
const pointer_typet &type) const;
4646

4747
/// Convert an (object,0) pair to an expression
48-
exprt pointer_expr(
49-
std::size_t object,
50-
const pointer_typet &type) const;
48+
exprt pointer_expr(const mp_integer &object, const pointer_typet &type) const;
5149

5250
~pointer_logict();
5351
explicit pointer_logict(const namespacet &_ns);
5452

55-
std::size_t add_object(const exprt &expr);
53+
mp_integer add_object(const exprt &expr);
5654

5755
/// \return number of NULL object
58-
std::size_t get_null_object() const
56+
const mp_integer &get_null_object() const
5957
{
6058
return null_object;
6159
}
6260

6361
/// \return number of INVALID object
64-
std::size_t get_invalid_object() const
62+
const mp_integer &get_invalid_object() const
6563
{
6664
return invalid_object;
6765
}
6866

6967
bool is_dynamic_object(const exprt &expr) const;
7068

71-
void get_dynamic_objects(std::vector<std::size_t> &objects) const;
69+
void get_dynamic_objects(std::vector<mp_integer> &objects) const;
7270

7371
protected:
7472
const namespacet &ns;
75-
std::size_t null_object, invalid_object;
73+
mp_integer null_object, invalid_object;
7674
};
7775

7876
#endif // CPROVER_SOLVERS_FLATTENING_POINTER_LOGIC_H

0 commit comments

Comments
 (0)