@@ -264,38 +264,40 @@ exprt flatten_byte_update(
264
264
else // sub_size!=1
265
265
{
266
266
exprt result=src.op0 ();
267
-
267
+ unsignedbv_typet byte_type (8 );
268
+
268
269
for (mp_integer i=0 ; i<element_size; ++i)
269
270
{
270
271
exprt new_value;
272
+ exprt i_expr=from_integer (i, ns.follow (src.op1 ().type ()));
271
273
272
274
if (element_size==1 )
273
275
new_value=src.op2 ();
274
276
else
275
277
{
276
- exprt i_expr=from_integer (i, ns.follow (src.op1 ().type ()));
277
-
278
278
byte_extract_exprt byte_extract_expr (
279
279
src.id ()==ID_byte_update_little_endian?ID_byte_extract_little_endian:
280
280
src.id ()==ID_byte_update_big_endian?ID_byte_extract_big_endian:
281
281
throw " unexpected src.id() in flatten_byte_update" ,
282
- array_type. subtype () );
282
+ byte_type );
283
283
284
284
byte_extract_expr.op ()=src.op2 ();
285
285
byte_extract_expr.offset ()=i_expr;
286
286
287
287
new_value=byte_extract_expr;
288
288
}
289
+
290
+ plus_exprt store_offset (src.op1 (),i_expr);
289
291
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 ()));
292
294
293
- index_exprt index_expr (src. op0 () , div_offset, array_type.subtype ());
295
+ index_exprt index_expr (result , div_offset, array_type.subtype ());
294
296
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) ;
299
301
300
302
// Call recurisvely, the array is gone!
301
303
exprt flattened_byte_update_expr=
0 commit comments