@@ -274,8 +274,11 @@ static exprt bv_to_expr(
274
274
target_type.id () == ID_c_enum || target_type.id () == ID_c_enum_tag ||
275
275
target_type.id () == ID_string)
276
276
{
277
+ std::size_t width = to_bitvector_type (bitvector_expr.type ()).get_width ();
278
+ exprt bv_expr =
279
+ typecast_exprt::conditional_cast (bitvector_expr, bv_typet{width});
277
280
return simplify_expr (
278
- typecast_exprt::conditional_cast (bitvector_expr , target_type), ns);
281
+ typecast_exprt::conditional_cast (bv_expr , target_type), ns);
279
282
}
280
283
281
284
if (target_type.id () == ID_struct)
@@ -371,7 +374,7 @@ static array_exprt unpack_array_vector(
371
374
// insert offset_bytes-many nil bytes into the output array
372
375
byte_operands.resize (
373
376
numeric_cast_v<std::size_t >(*offset_bytes - (*offset_bytes % el_bytes)),
374
- from_integer (0 , unsignedbv_typet ( 8 ) ));
377
+ from_integer (0 , bv_typet{ 8 } ));
375
378
}
376
379
}
377
380
@@ -409,7 +412,7 @@ static array_exprt unpack_array_vector(
409
412
const std::size_t size = byte_operands.size ();
410
413
return array_exprt (
411
414
std::move (byte_operands),
412
- array_typet ( unsignedbv_typet ( 8 ) , from_integer (size, size_type ())) );
415
+ array_typet{bv_typet{ 8 } , from_integer (size, size_type ())} );
413
416
}
414
417
415
418
// / Extract bytes from a sequence of bitvector-typed elements.
@@ -432,7 +435,7 @@ static void process_bit_fields(
432
435
const namespacet &ns)
433
436
{
434
437
const concatenation_exprt concatenation{std::move (bit_fields),
435
- unsignedbv_typet {total_bits}};
438
+ bv_typet {total_bits}};
436
439
437
440
exprt sub =
438
441
unpack_rec (concatenation, little_endian, offset_bytes, max_bytes, ns, true );
@@ -530,7 +533,7 @@ static array_exprt unpack_struct(
530
533
const std::size_t bits_int = numeric_cast_v<std::size_t >(*component_bits);
531
534
bit_fields->first .insert (
532
535
little_endian ? bit_fields->first .begin () : bit_fields->first .end (),
533
- typecast_exprt::conditional_cast (member, unsignedbv_typet {bits_int}));
536
+ typecast_exprt::conditional_cast (member, bv_typet {bits_int}));
534
537
bit_fields->second += bits_int;
535
538
536
539
member_offset_bits += *component_bits;
@@ -565,9 +568,8 @@ static array_exprt unpack_struct(
565
568
ns);
566
569
567
570
const std::size_t size = byte_operands.size ();
568
- return array_exprt{
569
- std::move (byte_operands),
570
- array_typet{unsignedbv_typet{8 }, from_integer (size, size_type ())}};
571
+ return array_exprt{std::move (byte_operands),
572
+ array_typet{bv_typet{8 }, from_integer (size, size_type ())}};
571
573
}
572
574
573
575
// / Rewrite a complex_exprt into its individual bytes.
@@ -607,9 +609,8 @@ unpack_complex(const exprt &src, bool little_endian, const namespacet &ns)
607
609
std::make_move_iterator (sub_imag.operands ().end ()));
608
610
609
611
const std::size_t size = byte_operands.size ();
610
- return array_exprt{
611
- std::move (byte_operands),
612
- array_typet{unsignedbv_typet (8 ), from_integer (size, size_type ())}};
612
+ return array_exprt{std::move (byte_operands),
613
+ array_typet{bv_typet{8 }, from_integer (size, size_type ())}};
613
614
}
614
615
615
616
// / Rewrite an object into its individual bytes.
@@ -713,8 +714,7 @@ static exprt unpack_rec(
713
714
else if (src.type ().id () == ID_pointer)
714
715
{
715
716
return unpack_rec (
716
- typecast_exprt (
717
- src, unsignedbv_typet (to_pointer_type (src.type ()).get_width ())),
717
+ typecast_exprt{src, bv_typet{to_pointer_type (src.type ()).get_width ()}},
718
718
little_endian,
719
719
offset_bytes,
720
720
max_bytes,
@@ -759,10 +759,11 @@ static exprt unpack_rec(
759
759
for (mp_integer i=0 ; i<bits; i+=8 )
760
760
{
761
761
extractbits_exprt extractbits (
762
- src,
763
- from_integer (i+7 , index_type ()),
762
+ typecast_exprt::conditional_cast (
763
+ src, bv_typet{numeric_cast_v<std::size_t >(bits)}),
764
+ from_integer (i + 7 , index_type ()),
764
765
from_integer (i, index_type ()),
765
- unsignedbv_typet ( 8 ) );
766
+ bv_typet{ 8 } );
766
767
767
768
// endianness_mapt should be the point of reference for mapping out
768
769
// endianness, but we need to work on elements here instead of
@@ -776,11 +777,11 @@ static exprt unpack_rec(
776
777
const std::size_t size = byte_operands.size ();
777
778
return array_exprt (
778
779
std::move (byte_operands),
779
- array_typet ( unsignedbv_typet ( 8 ) , from_integer (size, size_type ())) );
780
+ array_typet{bv_typet{ 8 } , from_integer (size, size_type ())} );
780
781
}
781
782
782
783
return array_exprt (
783
- {}, array_typet ( unsignedbv_typet ( 8 ) , from_integer (0 , size_type ())) );
784
+ {}, array_typet{bv_typet{ 8 } , from_integer (0 , size_type ())} );
784
785
}
785
786
786
787
// / Rewrite a byte extraction of a complex-typed result to byte extraction of
@@ -1258,7 +1259,7 @@ static exprt lower_byte_update_array_vector_non_const(
1258
1259
byte_extract_exprt{extract_opcode,
1259
1260
value_as_byte_array,
1260
1261
from_integer (0 , src.offset ().type ()),
1261
- array_typet{unsignedbv_typet {8 }, initial_bytes}}},
1262
+ array_typet{bv_typet {8 }, initial_bytes}}},
1262
1263
ns)};
1263
1264
1264
1265
// We will update one array/vector element at a time - compute the number of
@@ -1298,7 +1299,7 @@ static exprt lower_byte_update_array_vector_non_const(
1298
1299
byte_extract_exprt{extract_opcode,
1299
1300
value_as_byte_array,
1300
1301
std::move (offset_expr),
1301
- array_typet{unsignedbv_typet {8 }, subtype_size}}},
1302
+ array_typet{bv_typet {8 }, subtype_size}}},
1302
1303
ns);
1303
1304
1304
1305
result.add_to_operands (std::move (where), std::move (element));
@@ -1318,11 +1319,11 @@ static exprt lower_byte_update_array_vector_non_const(
1318
1319
src.id (),
1319
1320
index_exprt{src.op (), where},
1320
1321
from_integer (0 , src.offset ().type ()),
1321
- byte_extract_exprt{extract_opcode,
1322
- value_as_byte_array ,
1323
- from_integer (offset, src. offset (). type ()) ,
1324
- array_typet{unsignedbv_typet{ 8 } ,
1325
- from_integer (tail_size, size_type ())}}},
1322
+ byte_extract_exprt{
1323
+ extract_opcode ,
1324
+ value_as_byte_array ,
1325
+ from_integer (offset, src. offset (). type ()) ,
1326
+ array_typet{bv_typet{ 8 }, from_integer (tail_size, size_type ())}}},
1326
1327
ns);
1327
1328
1328
1329
result.add_to_operands (std::move (where), std::move (element));
@@ -1414,9 +1415,9 @@ static exprt lower_byte_update_array_vector(
1414
1415
src.id (),
1415
1416
index_exprt{src.op (), from_integer (i, index_type ())},
1416
1417
from_integer (update_offset < 0 ? 0 : update_offset, src.offset ().type ()),
1417
- array_exprt{std::move (update_values),
1418
- array_typet{unsignedbv_typet{ 8 } ,
1419
- from_integer (update_size, size_type ())}}};
1418
+ array_exprt{
1419
+ std::move (update_values) ,
1420
+ array_typet{bv_typet{ 8 }, from_integer (update_size, size_type ())}}};
1420
1421
elements.push_back (lower_byte_operators (bu, ns));
1421
1422
}
1422
1423
@@ -1493,21 +1494,18 @@ static exprt lower_byte_update_struct(
1493
1494
extract_opcode,
1494
1495
src.op (),
1495
1496
from_integer (0 , src.offset ().type ()),
1496
- array_typet{unsignedbv_typet {8 }, src_size_opt.value ()}};
1497
+ array_typet{bv_typet {8 }, src_size_opt.value ()}};
1497
1498
1498
1499
byte_update_exprt bu = src;
1499
1500
bu.op () = lower_byte_extract (byte_extract_expr, ns);
1500
1501
1501
1502
return lower_byte_extract (
1502
- byte_extract_exprt{extract_opcode,
1503
- lower_byte_update_byte_array_vector (
1504
- bu,
1505
- unsignedbv_typet{8 },
1506
- value_as_byte_array,
1507
- non_const_update_bound,
1508
- ns),
1509
- from_integer (0 , src.offset ().type ()),
1510
- src.type ()},
1503
+ byte_extract_exprt{
1504
+ extract_opcode,
1505
+ lower_byte_update_byte_array_vector (
1506
+ bu, bv_typet{8 }, value_as_byte_array, non_const_update_bound, ns),
1507
+ from_integer (0 , src.offset ().type ()),
1508
+ src.type ()},
1511
1509
ns);
1512
1510
}
1513
1511
@@ -1544,11 +1542,10 @@ static exprt lower_byte_update_struct(
1544
1542
const bool little_endian = src.id () == ID_byte_update_little_endian;
1545
1543
if (shift != 0 )
1546
1544
{
1547
- member =
1548
- concatenation_exprt{typecast_exprt::conditional_cast (
1549
- member, unsignedbv_typet{element_bits_int}),
1550
- from_integer (0 , unsignedbv_typet{shift}),
1551
- unsignedbv_typet{shift + element_bits_int}};
1545
+ member = concatenation_exprt{
1546
+ typecast_exprt::conditional_cast (member, bv_typet{element_bits_int}),
1547
+ from_integer (0 , bv_typet{shift}),
1548
+ bv_typet{shift + element_bits_int}};
1552
1549
if (!little_endian)
1553
1550
member.op0 ().swap (member.op1 ());
1554
1551
}
@@ -1557,9 +1554,9 @@ static exprt lower_byte_update_struct(
1557
1554
src.id (),
1558
1555
std::move (member),
1559
1556
offset,
1560
- array_exprt{std::move (update_values),
1561
- array_typet{unsignedbv_typet{ 8 } ,
1562
- from_integer (update_size, size_type ())}}};
1557
+ array_exprt{
1558
+ std::move (update_values) ,
1559
+ array_typet{bv_typet{ 8 }, from_integer (update_size, size_type ())}}};
1563
1560
1564
1561
if (shift == 0 )
1565
1562
elements.push_back (lower_byte_operators (bu, ns));
@@ -1569,7 +1566,7 @@ static exprt lower_byte_update_struct(
1569
1566
extractbits_exprt{lower_byte_operators (bu, ns),
1570
1567
element_bits_int - 1 + (little_endian ? shift : 0 ),
1571
1568
(little_endian ? shift : 0 ),
1572
- unsignedbv_typet {element_bits_int}},
1569
+ bv_typet {element_bits_int}},
1573
1570
comp.type ()));
1574
1571
}
1575
1572
@@ -1701,12 +1698,12 @@ static exprt lower_byte_update(
1701
1698
// build mask
1702
1699
exprt mask;
1703
1700
if (is_little_endian)
1704
- mask =
1705
- from_integer (power (2 , update_size * 8 ) - 1 , unsignedbv_typet{width});
1701
+ mask = from_integer (power (2 , update_size * 8 ) - 1 , bv_typet{width});
1706
1702
else
1703
+ {
1707
1704
mask = from_integer (
1708
- power (2 , width) - power (2 , width - update_size * 8 ),
1709
- unsignedbv_typet{width});
1705
+ power (2 , width) - power (2 , width - update_size * 8 ), bv_typet{width});
1706
+ }
1710
1707
1711
1708
const typet &offset_type = src.offset ().type ();
1712
1709
mult_exprt offset_times_eight{src.offset (), from_integer (8 , offset_type)};
@@ -1722,13 +1719,13 @@ static exprt lower_byte_update(
1722
1719
1723
1720
// original_bits &= ~mask
1724
1721
exprt val_before =
1725
- typecast_exprt::conditional_cast (src.op (), unsignedbv_typet {type_bits});
1722
+ typecast_exprt::conditional_cast (src.op (), bv_typet {type_bits});
1726
1723
if (width > type_bits)
1727
1724
{
1728
- val_before = concatenation_exprt{
1729
- from_integer (0 , unsignedbv_typet {width - type_bits}),
1730
- val_before,
1731
- unsignedbv_typet {width}};
1725
+ val_before =
1726
+ concatenation_exprt{ from_integer (0 , bv_typet {width - type_bits}),
1727
+ val_before,
1728
+ bv_typet {width}};
1732
1729
1733
1730
if (!is_little_endian)
1734
1731
val_before.op0 ().swap (val_before.op1 ());
@@ -1737,17 +1734,17 @@ static exprt lower_byte_update(
1737
1734
1738
1735
// concatenate and zero-extend the value
1739
1736
concatenation_exprt value{exprt::operandst{value_as_byte_array.operands ()},
1740
- unsignedbv_typet {update_size * 8 }};
1737
+ bv_typet {update_size * 8 }};
1741
1738
if (is_little_endian)
1742
1739
std::reverse (value.operands ().begin (), value.operands ().end ());
1743
1740
1744
1741
exprt zero_extended;
1745
1742
if (width > update_size * 8 )
1746
1743
{
1747
- zero_extended = concatenation_exprt{
1748
- from_integer (0 , unsignedbv_typet {width - update_size * 8 }),
1749
- value,
1750
- unsignedbv_typet {width}};
1744
+ zero_extended =
1745
+ concatenation_exprt{ from_integer (0 , bv_typet {width - update_size * 8 }),
1746
+ value,
1747
+ bv_typet {width}};
1751
1748
1752
1749
if (!is_little_endian)
1753
1750
zero_extended.op0 ().swap (zero_extended.op1 ());
@@ -1769,10 +1766,8 @@ static exprt lower_byte_update(
1769
1766
{
1770
1767
return simplify_expr (
1771
1768
typecast_exprt::conditional_cast (
1772
- extractbits_exprt{bitor_expr,
1773
- width - 1 ,
1774
- width - type_bits,
1775
- unsignedbv_typet{type_bits}},
1769
+ extractbits_exprt{
1770
+ bitor_expr, width - 1 , width - type_bits, bv_typet{type_bits}},
1776
1771
src.type ()),
1777
1772
ns);
1778
1773
}
@@ -1840,8 +1835,7 @@ exprt lower_byte_update(const byte_update_exprt &src, const namespacet &ns)
1840
1835
extract_opcode,
1841
1836
src.value (),
1842
1837
from_integer (0 , src.offset ().type ()),
1843
- array_typet{unsignedbv_typet{8 },
1844
- from_integer (max_update_bytes, size_type ())}};
1838
+ array_typet{bv_typet{8 }, from_integer (max_update_bytes, size_type ())}};
1845
1839
1846
1840
const array_exprt value_as_byte_array =
1847
1841
to_array_expr (lower_byte_extract (byte_extract_expr, ns));
0 commit comments