Skip to content

Commit fd1bbd1

Browse files
committed
Fix flattening of byte-update operators
1 parent 946f870 commit fd1bbd1

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/solvers/flattening/flatten_byte_operators.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -264,38 +264,40 @@ exprt flatten_byte_update(
264264
else // sub_size!=1
265265
{
266266
exprt result=src.op0();
267-
267+
unsignedbv_typet byte_type(8);
268+
268269
for(mp_integer i=0; i<element_size; ++i)
269270
{
270271
exprt new_value;
272+
exprt i_expr=from_integer(i, ns.follow(src.op1().type()));
271273

272274
if(element_size==1)
273275
new_value=src.op2();
274276
else
275277
{
276-
exprt i_expr=from_integer(i, ns.follow(src.op1().type()));
277-
278278
byte_extract_exprt byte_extract_expr(
279279
src.id()==ID_byte_update_little_endian?ID_byte_extract_little_endian:
280280
src.id()==ID_byte_update_big_endian?ID_byte_extract_big_endian:
281281
throw "unexpected src.id() in flatten_byte_update",
282-
array_type.subtype());
282+
byte_type);
283283

284284
byte_extract_expr.op()=src.op2();
285285
byte_extract_expr.offset()=i_expr;
286286

287287
new_value=byte_extract_expr;
288288
}
289+
290+
plus_exprt store_offset(src.op1(),i_expr);
289291

290-
div_exprt div_offset(src.op1(), from_integer(sub_size, src.op1().type()));
291-
mod_exprt mod_offset(src.op1(), from_integer(sub_size, src.op1().type()));
292+
div_exprt div_offset(store_offset, from_integer(sub_size, store_offset.type()));
293+
mod_exprt mod_offset(store_offset, from_integer(sub_size, store_offset.type()));
292294

293-
index_exprt index_expr(src.op0(), div_offset, array_type.subtype());
295+
index_exprt index_expr(result, div_offset, array_type.subtype());
294296

295-
byte_update_exprt byte_update_expr(src.id(), array_type.subtype());
296-
byte_update_expr.op()=index_expr;
297-
byte_update_expr.offset()=mod_offset;
298-
byte_update_expr.value()=new_value;
297+
byte_update_exprt byte_update_expr(src.id(),
298+
index_expr,
299+
mod_offset,
300+
new_value);
299301

300302
// Call recurisvely, the array is gone!
301303
exprt flattened_byte_update_expr=

0 commit comments

Comments
 (0)