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