Skip to content

Commit e04d0eb

Browse files
authored
Merge pull request #7376 from tautschnig/bugfixes/simp-byte-extract
Simplify byte extract: fix unconditional read from optional values
2 parents 8848ad8 + c7550b6 commit e04d0eb

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/util/simplify_expr.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,15 +1680,19 @@ simplify_exprt::simplify_byte_extract(const byte_extract_exprt &expr)
16801680
{
16811681
return op_byte_update.value();
16821682
}
1683-
else if(
1684-
el_size.has_value() &&
1685-
*el_size <= pointer_offset_bits(op_byte_update.value().type(), ns))
1683+
else if(el_size.has_value())
16861684
{
1687-
auto tmp = expr;
1688-
tmp.op() = op_byte_update.value();
1689-
tmp.offset() = from_integer(0, expr.offset().type());
1685+
const auto update_bits_opt =
1686+
pointer_offset_bits(op_byte_update.value().type(), ns);
1687+
1688+
if(update_bits_opt.has_value() && *el_size <= *update_bits_opt)
1689+
{
1690+
auto tmp = expr;
1691+
tmp.op() = op_byte_update.value();
1692+
tmp.offset() = from_integer(0, expr.offset().type());
16901693

1691-
return changed(simplify_byte_extract(tmp)); // recursive call
1694+
return changed(simplify_byte_extract(tmp)); // recursive call
1695+
}
16921696
}
16931697
}
16941698

@@ -1706,7 +1710,7 @@ simplify_exprt::simplify_byte_extract(const byte_extract_exprt &expr)
17061710
{
17071711
const byte_update_exprt &bu = to_byte_update_expr(expr.op());
17081712
const auto update_offset = numeric_cast<mp_integer>(bu.offset());
1709-
if(update_offset.has_value())
1713+
if(el_size.has_value() && update_offset.has_value())
17101714
{
17111715
if(
17121716
*offset * expr.get_bits_per_byte() + *el_size <=

0 commit comments

Comments
 (0)