@@ -228,8 +228,7 @@ void goto_checkt::div_by_zero_check(
228
228
if (zero.is_nil ())
229
229
throw " no zero of argument type of operator " +expr.id_string ();
230
230
231
- exprt inequality (ID_notequal, bool_typet ());
232
- inequality.copy_to_operands (expr.op1 (), zero);
231
+ const notequal_exprt inequality (expr.op1 (), zero);
233
232
234
233
add_guarded_claim (
235
234
inequality,
@@ -329,8 +328,7 @@ void goto_checkt::mod_by_zero_check(
329
328
if (zero.is_nil ())
330
329
throw " no zero of argument type of operator " +expr.id_string ();
331
330
332
- exprt inequality (ID_notequal, bool_typet ());
333
- inequality.copy_to_operands (expr.op1 (), zero);
331
+ const notequal_exprt inequality (expr.op1 (), zero);
334
332
335
333
add_guarded_claim (
336
334
inequality,
@@ -374,13 +372,13 @@ void goto_checkt::conversion_check(
374
372
if (new_width>=old_width)
375
373
return ; // always ok
376
374
377
- binary_relation_exprt no_overflow_upper (ID_le);
378
- no_overflow_upper.lhs ()=expr.op0 ();
379
- no_overflow_upper.rhs ()=from_integer (power (2 , new_width-1 )-1 , old_type);
375
+ const binary_relation_exprt no_overflow_upper (
376
+ expr.op0 (),
377
+ ID_le,
378
+ from_integer (power (2 , new_width - 1 ) - 1 , old_type));
380
379
381
- binary_relation_exprt no_overflow_lower (ID_ge);
382
- no_overflow_lower.lhs ()=expr.op0 ();
383
- no_overflow_lower.rhs ()=from_integer (-power (2 , new_width-1 ), old_type);
380
+ const binary_relation_exprt no_overflow_lower (
381
+ expr.op0 (), ID_ge, from_integer (-power (2 , new_width - 1 ), old_type));
384
382
385
383
add_guarded_claim (
386
384
and_exprt (no_overflow_lower, no_overflow_upper),
@@ -396,9 +394,10 @@ void goto_checkt::conversion_check(
396
394
if (new_width>=old_width+1 )
397
395
return ; // always ok
398
396
399
- binary_relation_exprt no_overflow_upper (ID_le);
400
- no_overflow_upper.lhs ()=expr.op0 ();
401
- no_overflow_upper.rhs ()=from_integer (power (2 , new_width-1 )-1 , old_type);
397
+ const binary_relation_exprt no_overflow_upper (
398
+ expr.op0 (),
399
+ ID_le,
400
+ from_integer (power (2 , new_width - 1 ) - 1 , old_type));
402
401
403
402
add_guarded_claim (
404
403
no_overflow_upper,
@@ -413,15 +412,13 @@ void goto_checkt::conversion_check(
413
412
// Note that the fractional part is truncated!
414
413
ieee_floatt upper (to_floatbv_type (old_type));
415
414
upper.from_integer (power (2 , new_width-1 ));
416
- binary_relation_exprt no_overflow_upper (ID_lt);
417
- no_overflow_upper.lhs ()=expr.op0 ();
418
- no_overflow_upper.rhs ()=upper.to_expr ();
415
+ const binary_relation_exprt no_overflow_upper (
416
+ expr.op0 (), ID_lt, upper.to_expr ());
419
417
420
418
ieee_floatt lower (to_floatbv_type (old_type));
421
419
lower.from_integer (-power (2 , new_width-1 )-1 );
422
- binary_relation_exprt no_overflow_lower (ID_gt);
423
- no_overflow_lower.lhs ()=expr.op0 ();
424
- no_overflow_lower.rhs ()=lower.to_expr ();
420
+ const binary_relation_exprt no_overflow_lower (
421
+ expr.op0 (), ID_gt, lower.to_expr ());
425
422
426
423
add_guarded_claim (
427
424
and_exprt (no_overflow_lower, no_overflow_upper),
@@ -443,9 +440,8 @@ void goto_checkt::conversion_check(
443
440
if (new_width>=old_width-1 )
444
441
{
445
442
// only need lower bound check
446
- binary_relation_exprt no_overflow_lower (ID_ge);
447
- no_overflow_lower.lhs ()=expr.op0 ();
448
- no_overflow_lower.rhs ()=from_integer (0 , old_type);
443
+ const binary_relation_exprt no_overflow_lower (
444
+ expr.op0 (), ID_ge, from_integer (0 , old_type));
449
445
450
446
add_guarded_claim (
451
447
no_overflow_lower,
@@ -458,13 +454,11 @@ void goto_checkt::conversion_check(
458
454
else
459
455
{
460
456
// need both
461
- binary_relation_exprt no_overflow_upper (ID_le);
462
- no_overflow_upper.lhs ()=expr.op0 ();
463
- no_overflow_upper.rhs ()=from_integer (power (2 , new_width)-1 , old_type);
457
+ const binary_relation_exprt no_overflow_upper (
458
+ expr.op0 (), ID_le, from_integer (power (2 , new_width) - 1 , old_type));
464
459
465
- binary_relation_exprt no_overflow_lower (ID_ge);
466
- no_overflow_lower.lhs ()=expr.op0 ();
467
- no_overflow_lower.rhs ()=from_integer (0 , old_type);
460
+ const binary_relation_exprt no_overflow_lower (
461
+ expr.op0 (), ID_ge, from_integer (0 , old_type));
468
462
469
463
add_guarded_claim (
470
464
and_exprt (no_overflow_lower, no_overflow_upper),
@@ -481,9 +475,8 @@ void goto_checkt::conversion_check(
481
475
if (new_width>=old_width)
482
476
return ; // always ok
483
477
484
- binary_relation_exprt no_overflow_upper (ID_le);
485
- no_overflow_upper.lhs ()=expr.op0 ();
486
- no_overflow_upper.rhs ()=from_integer (power (2 , new_width)-1 , old_type);
478
+ const binary_relation_exprt no_overflow_upper (
479
+ expr.op0 (), ID_le, from_integer (power (2 , new_width) - 1 , old_type));
487
480
488
481
add_guarded_claim (
489
482
no_overflow_upper,
@@ -498,15 +491,13 @@ void goto_checkt::conversion_check(
498
491
// Note that the fractional part is truncated!
499
492
ieee_floatt upper (to_floatbv_type (old_type));
500
493
upper.from_integer (power (2 , new_width)-1 );
501
- binary_relation_exprt no_overflow_upper (ID_lt);
502
- no_overflow_upper.lhs ()=expr.op0 ();
503
- no_overflow_upper.rhs ()=upper.to_expr ();
494
+ const binary_relation_exprt no_overflow_upper (
495
+ expr.op0 (), ID_lt, upper.to_expr ());
504
496
505
497
ieee_floatt lower (to_floatbv_type (old_type));
506
498
lower.from_integer (-1 );
507
- binary_relation_exprt no_overflow_lower (ID_gt);
508
- no_overflow_lower.lhs ()=expr.op0 ();
509
- no_overflow_lower.rhs ()=lower.to_expr ();
499
+ const binary_relation_exprt no_overflow_lower (
500
+ expr.op0 (), ID_gt, lower.to_expr ());
510
501
511
502
add_guarded_claim (
512
503
and_exprt (no_overflow_lower, no_overflow_upper),
@@ -665,8 +656,8 @@ void goto_checkt::float_overflow_check(
665
656
if (ns.follow (expr.op0 ().type ()).id ()==ID_floatbv)
666
657
{
667
658
// float-to-float
668
- unary_exprt op0_inf (ID_isinf, expr.op0 (), bool_typet ());
669
- unary_exprt new_inf (ID_isinf, expr, bool_typet () );
659
+ const isinf_exprt op0_inf (expr.op0 ());
660
+ const isinf_exprt new_inf (expr);
670
661
671
662
or_exprt overflow_check (op0_inf, not_exprt (new_inf));
672
663
@@ -681,7 +672,7 @@ void goto_checkt::float_overflow_check(
681
672
else
682
673
{
683
674
// non-float-to-float
684
- unary_exprt new_inf (ID_isinf, expr, bool_typet () );
675
+ const isinf_exprt new_inf (expr);
685
676
686
677
add_guarded_claim (
687
678
not_exprt (new_inf),
@@ -699,8 +690,8 @@ void goto_checkt::float_overflow_check(
699
690
assert (expr.operands ().size ()==2 );
700
691
701
692
// Can overflow if dividing by something small
702
- unary_exprt new_inf (ID_isinf, expr, bool_typet () );
703
- unary_exprt op0_inf (ID_isinf, expr.op0 (), bool_typet ());
693
+ const isinf_exprt new_inf (expr);
694
+ const isinf_exprt op0_inf (expr.op0 ());
704
695
705
696
or_exprt overflow_check (op0_inf, not_exprt (new_inf));
706
697
@@ -730,9 +721,9 @@ void goto_checkt::float_overflow_check(
730
721
if (expr.operands ().size ()==2 )
731
722
{
732
723
// Can overflow
733
- unary_exprt new_inf (ID_isinf, expr, bool_typet () );
734
- unary_exprt op0_inf (ID_isinf, expr.op0 (), bool_typet ());
735
- unary_exprt op1_inf (ID_isinf, expr.op1 (), bool_typet ());
724
+ const isinf_exprt new_inf (expr);
725
+ const isinf_exprt op0_inf (expr.op0 ());
726
+ const isinf_exprt op1_inf (expr.op1 ());
736
727
737
728
or_exprt overflow_check (op0_inf, op1_inf, not_exprt (new_inf));
738
729
@@ -791,11 +782,11 @@ void goto_checkt::nan_check(
791
782
// there a two ways to get a new NaN on division:
792
783
// 0/0 = NaN and x/inf = NaN
793
784
// (note that x/0 = +-inf for x!=0 and x!=inf)
794
- exprt zero_div_zero= and_exprt (
785
+ const and_exprt zero_div_zero (
795
786
ieee_float_equal_exprt (expr.op0 (), from_integer (0 , expr.op0 ().type ())),
796
787
ieee_float_equal_exprt (expr.op1 (), from_integer (0 , expr.op1 ().type ())));
797
788
798
- exprt div_inf= unary_exprt (ID_isinf, expr.op1 (), bool_typet ());
789
+ const isinf_exprt div_inf ( expr.op1 ());
799
790
800
791
isnan=or_exprt (zero_div_zero, div_inf);
801
792
}
@@ -807,13 +798,13 @@ void goto_checkt::nan_check(
807
798
assert (expr.operands ().size ()==2 );
808
799
809
800
// Inf * 0 is NaN
810
- exprt inf_times_zero= and_exprt (
811
- unary_exprt (ID_isinf, expr.op0 (), bool_typet ()),
801
+ const and_exprt inf_times_zero (
802
+ isinf_exprt ( expr.op0 ()),
812
803
ieee_float_equal_exprt (expr.op1 (), from_integer (0 , expr.op1 ().type ())));
813
804
814
- exprt zero_times_inf= and_exprt (
805
+ const and_exprt zero_times_inf (
815
806
ieee_float_equal_exprt (expr.op1 (), from_integer (0 , expr.op1 ().type ())),
816
- unary_exprt (ID_isinf, expr.op0 (), bool_typet ()));
807
+ isinf_exprt ( expr.op0 ()));
817
808
818
809
isnan=or_exprt (inf_times_zero, zero_times_inf);
819
810
}
@@ -1055,13 +1046,9 @@ void goto_checkt::pointer_validity_check(
1055
1046
1056
1047
if (flags.is_unknown () || flags.is_dynamic_heap ())
1057
1048
{
1058
- exprt dynamic_bounds=
1059
- or_exprt (dynamic_object_lower_bound (pointer, ns, access_lb),
1060
- dynamic_object_upper_bound (
1061
- pointer,
1062
- dereference_type,
1063
- ns,
1064
- access_ub));
1049
+ const or_exprt dynamic_bounds (
1050
+ dynamic_object_lower_bound (pointer, ns, access_lb),
1051
+ dynamic_object_upper_bound (pointer, dereference_type, ns, access_ub));
1065
1052
1066
1053
add_guarded_claim (
1067
1054
or_exprt (
@@ -1080,13 +1067,9 @@ void goto_checkt::pointer_validity_check(
1080
1067
flags.is_dynamic_local () ||
1081
1068
flags.is_static_lifetime ())
1082
1069
{
1083
- exprt object_bounds=
1084
- or_exprt (object_lower_bound (pointer, ns, access_lb),
1085
- object_upper_bound (
1086
- pointer,
1087
- dereference_type,
1088
- ns,
1089
- access_ub));
1070
+ const or_exprt object_bounds (
1071
+ object_lower_bound (pointer, ns, access_lb),
1072
+ object_upper_bound (pointer, dereference_type, ns, access_ub));
1090
1073
1091
1074
add_guarded_claim (
1092
1075
or_exprt (allocs, dynamic_object (pointer), not_exprt (object_bounds)),
@@ -1672,12 +1655,11 @@ void goto_checkt::goto_check(
1672
1655
exprt lhs=ns.lookup (CPROVER_PREFIX " dead_object" ).symbol_expr ();
1673
1656
if (!base_type_eq (lhs.type (), address_of_expr.type (), ns))
1674
1657
address_of_expr.make_typecast (lhs.type ());
1675
- exprt rhs=
1676
- if_exprt (
1677
- side_effect_expr_nondett (bool_typet ()),
1678
- address_of_expr,
1679
- lhs,
1680
- lhs.type ());
1658
+ const if_exprt rhs (
1659
+ side_effect_expr_nondett (bool_typet ()),
1660
+ address_of_expr,
1661
+ lhs,
1662
+ lhs.type ());
1681
1663
t->source_location =i.source_location ;
1682
1664
t->code =code_assignt (lhs, rhs);
1683
1665
t->code .add_source_location ()=i.source_location ;
0 commit comments