@@ -604,54 +604,53 @@ bool simplify_exprt::simplify_plus(exprt &expr)
604
604
605
605
bool simplify_exprt::simplify_minus (exprt &expr)
606
606
{
607
- if (!is_number (expr.type ()) &&
608
- expr.type ().id ()!=ID_pointer)
607
+ auto const &minus_expr = to_minus_expr (expr);
608
+ if (!is_number (minus_expr.type ()) &&
609
+ minus_expr.type ().id ()!=ID_pointer)
609
610
return true ;
610
611
611
- exprt::operandst &operands=expr.operands ();
612
-
613
- assert (expr.id ()==ID_minus);
612
+ const exprt::operandst &operands = minus_expr.operands ();
614
613
615
614
if (operands.size ()!=2 )
616
615
return true ;
617
616
618
- if (is_number (expr. type ()) &&
619
- is_number (operands[0 ].type ()) &&
620
- is_number (operands[1 ].type ()))
617
+ if (
618
+ is_number (minus_expr. type ()) && is_number (operands[0 ].type ()) &&
619
+ is_number (operands[1 ].type ()))
621
620
{
622
621
// rewrite "a-b" to "a+(-b)"
623
- unary_minus_exprt tmp2 (operands[1 ]);
624
- simplify_unary_minus (tmp2 );
622
+ unary_minus_exprt rhs_negated (operands[1 ]);
623
+ simplify_unary_minus (rhs_negated );
625
624
626
- plus_exprt tmp (operands[0 ], tmp2 );
627
- simplify_node (tmp );
625
+ plus_exprt plus_expr (operands[0 ], rhs_negated );
626
+ simplify_node (plus_expr );
628
627
629
- expr.swap (tmp );
628
+ expr.swap (plus_expr );
630
629
return false ;
631
630
}
632
- else if (expr .type ().id ()==ID_pointer &&
631
+ else if (minus_expr .type ().id ()==ID_pointer &&
633
632
operands[0 ].type ().id ()==ID_pointer &&
634
633
is_number (operands[1 ].type ()))
635
634
{
636
635
// pointer arithmetic: rewrite "p-i" to "p+(-i)"
637
- unary_minus_exprt tmp2 (operands[1 ]);
638
- simplify_unary_minus (tmp2 );
636
+ unary_minus_exprt negated_pointer_offset (operands[1 ]);
637
+ simplify_unary_minus (negated_pointer_offset );
639
638
640
- plus_exprt tmp (operands[0 ], tmp2 );
641
- simplify_plus (tmp );
639
+ plus_exprt pointer_offset_expr (operands[0 ], negated_pointer_offset );
640
+ simplify_plus (pointer_offset_expr );
642
641
643
- expr.swap (tmp );
642
+ expr.swap (pointer_offset_expr );
644
643
return false ;
645
644
}
646
- else if (is_number (expr .type ()) &&
645
+ else if (is_number (minus_expr .type ()) &&
647
646
operands[0 ].type ().id ()==ID_pointer &&
648
647
operands[1 ].type ().id ()==ID_pointer)
649
648
{
650
649
// pointer arithmetic: rewrite "p-p" to "0"
651
650
652
651
if (operands[0 ]==operands[1 ])
653
652
{
654
- exprt zero=from_integer (0 , expr .type ());
653
+ exprt zero=from_integer (0 , minus_expr .type ());
655
654
CHECK_RETURN (zero.is_not_nil ());
656
655
expr=zero;
657
656
return false ;
0 commit comments