Skip to content

Commit f887538

Browse files
committed
Typecast to pointer: support all bitvector types
Even floating-point values are ok to just be re-interpreted as bit strings.
1 parent ade7197 commit f887538

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/solvers/flattening/bv_pointers.cpp

+4-6
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,11 @@ bvt bv_pointerst::convert_pointer_type(const exprt &expr)
253253

254254
if(op_type.id()==ID_pointer)
255255
return convert_bv(op);
256-
else if(op_type.id()==ID_signedbv ||
257-
op_type.id()==ID_unsignedbv ||
258-
op_type.id()==ID_bool ||
259-
op_type.id()==ID_c_enum ||
260-
op_type.id()==ID_c_enum_tag)
256+
else if(
257+
can_cast_type<bitvector_typet>(op_type) || op_type.id() == ID_c_enum ||
258+
op_type.id() == ID_c_enum_tag)
261259
{
262-
// Cast from integer to pointer.
260+
// Cast from a bitvector type to pointer.
263261
// We just do a zero extension.
264262

265263
const bvt &op_bv=convert_bv(op);

src/solvers/smt2/smt2_conv.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,10 @@ std::string smt2_convt::type2id(const typet &type) const
723723
{
724724
return type2id(ns.follow_tag(to_c_enum_tag_type(type)).subtype());
725725
}
726+
else if(type.id() == ID_pointer)
727+
{
728+
return "p" + std::to_string(to_pointer_type(type).get_width());
729+
}
726730
else
727731
{
728732
UNREACHABLE;

0 commit comments

Comments
 (0)