@@ -579,18 +579,19 @@ exprt simplify_state_expr_node(
579
579
{
580
580
const auto &element_address_expr =
581
581
to_element_address_expr (pointer_offset_expr.pointer ());
582
- if (element_address_expr.base ().id () == ID_object_address)
582
+ // pointer_offset(element_address(Z, y)) -->
583
+ // pointer_offset(Z) + y*sizeof(x)
584
+ auto size_opt = size_of_expr (element_address_expr.element_type (), ns);
585
+ if (size_opt.has_value ())
583
586
{
584
- // pointer_offset(element_address(❝x❞, y)) -> y*sizeof(x)
585
- auto size_opt = size_of_expr (element_address_expr.element_type (), ns);
586
- if (size_opt.has_value ())
587
- {
588
- auto product = mult_exprt (
589
- typecast_exprt::conditional_cast (
590
- element_address_expr.index (), src.type ()),
591
- typecast_exprt::conditional_cast (*size_opt, src.type ()));
592
- return std::move (product);
593
- }
587
+ auto product = mult_exprt (
588
+ typecast_exprt::conditional_cast (
589
+ element_address_expr.index (), src.type ()),
590
+ typecast_exprt::conditional_cast (*size_opt, src.type ()));
591
+ auto pointer_offset = pointer_offset_exprt (
592
+ element_address_expr.base (), pointer_offset_expr.type ());
593
+ auto sum = plus_exprt (pointer_offset, std::move (product));
594
+ return std::move (sum);
594
595
}
595
596
}
596
597
}
0 commit comments