Skip to content

Commit b5a0aec

Browse files
committed
Simplify concatenation: ensure type consistency
We must not end up with single-element concatenation that has a type different from its operand. Observed on Pointer_byte_extract8 once enabling further simplification of byte extract.
1 parent 1463fd1 commit b5a0aec

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

src/util/simplify_expr_int.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,14 @@ simplify_exprt::simplify_concatenation(const concatenation_exprt &expr)
906906
.set_width(
907907
to_bitvector_type(eb_i.type()).get_width() +
908908
to_bitvector_type(eb_n.type()).get_width());
909-
opi = eb_merged;
909+
if(expr.type().id() != eb_merged.type().id())
910+
{
911+
bitvector_typet bt = to_bitvector_type(expr.type());
912+
bt.set_width(to_bitvector_type(eb_merged.type()).get_width());
913+
opi = simplify_typecast(typecast_exprt{eb_merged, bt});
914+
}
915+
else
916+
opi = eb_merged;
910917
// erase opn
911918
new_expr.operands().erase(new_expr.operands().begin() + i + 1);
912919
no_change = false;

0 commit comments

Comments
 (0)