Skip to content

Commit a7cc2a0

Browse files
author
Daniel Kroening
authored
Merge pull request diffblue#1885 from tautschnig/use-std-expr
Use std_{code,expr,type} constructors
2 parents 6ef804c + d04312f commit a7cc2a0

File tree

80 files changed

+620
-949
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+620
-949
lines changed

src/analyses/goto_check.cpp

+53-71
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,7 @@ void goto_checkt::div_by_zero_check(
228228
if(zero.is_nil())
229229
throw "no zero of argument type of operator "+expr.id_string();
230230

231-
exprt inequality(ID_notequal, bool_typet());
232-
inequality.copy_to_operands(expr.op1(), zero);
231+
const notequal_exprt inequality(expr.op1(), zero);
233232

234233
add_guarded_claim(
235234
inequality,
@@ -329,8 +328,7 @@ void goto_checkt::mod_by_zero_check(
329328
if(zero.is_nil())
330329
throw "no zero of argument type of operator "+expr.id_string();
331330

332-
exprt inequality(ID_notequal, bool_typet());
333-
inequality.copy_to_operands(expr.op1(), zero);
331+
const notequal_exprt inequality(expr.op1(), zero);
334332

335333
add_guarded_claim(
336334
inequality,
@@ -374,13 +372,13 @@ void goto_checkt::conversion_check(
374372
if(new_width>=old_width)
375373
return; // always ok
376374

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));
380379

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));
384382

385383
add_guarded_claim(
386384
and_exprt(no_overflow_lower, no_overflow_upper),
@@ -396,9 +394,10 @@ void goto_checkt::conversion_check(
396394
if(new_width>=old_width+1)
397395
return; // always ok
398396

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));
402401

403402
add_guarded_claim(
404403
no_overflow_upper,
@@ -413,15 +412,13 @@ void goto_checkt::conversion_check(
413412
// Note that the fractional part is truncated!
414413
ieee_floatt upper(to_floatbv_type(old_type));
415414
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());
419417

420418
ieee_floatt lower(to_floatbv_type(old_type));
421419
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());
425422

426423
add_guarded_claim(
427424
and_exprt(no_overflow_lower, no_overflow_upper),
@@ -443,9 +440,8 @@ void goto_checkt::conversion_check(
443440
if(new_width>=old_width-1)
444441
{
445442
// 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));
449445

450446
add_guarded_claim(
451447
no_overflow_lower,
@@ -458,13 +454,11 @@ void goto_checkt::conversion_check(
458454
else
459455
{
460456
// 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));
464459

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));
468462

469463
add_guarded_claim(
470464
and_exprt(no_overflow_lower, no_overflow_upper),
@@ -481,9 +475,8 @@ void goto_checkt::conversion_check(
481475
if(new_width>=old_width)
482476
return; // always ok
483477

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));
487480

488481
add_guarded_claim(
489482
no_overflow_upper,
@@ -498,15 +491,13 @@ void goto_checkt::conversion_check(
498491
// Note that the fractional part is truncated!
499492
ieee_floatt upper(to_floatbv_type(old_type));
500493
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());
504496

505497
ieee_floatt lower(to_floatbv_type(old_type));
506498
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());
510501

511502
add_guarded_claim(
512503
and_exprt(no_overflow_lower, no_overflow_upper),
@@ -665,8 +656,8 @@ void goto_checkt::float_overflow_check(
665656
if(ns.follow(expr.op0().type()).id()==ID_floatbv)
666657
{
667658
// 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);
670661

671662
or_exprt overflow_check(op0_inf, not_exprt(new_inf));
672663

@@ -681,7 +672,7 @@ void goto_checkt::float_overflow_check(
681672
else
682673
{
683674
// non-float-to-float
684-
unary_exprt new_inf(ID_isinf, expr, bool_typet());
675+
const isinf_exprt new_inf(expr);
685676

686677
add_guarded_claim(
687678
not_exprt(new_inf),
@@ -699,8 +690,8 @@ void goto_checkt::float_overflow_check(
699690
assert(expr.operands().size()==2);
700691

701692
// 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());
704695

705696
or_exprt overflow_check(op0_inf, not_exprt(new_inf));
706697

@@ -730,9 +721,9 @@ void goto_checkt::float_overflow_check(
730721
if(expr.operands().size()==2)
731722
{
732723
// 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());
736727

737728
or_exprt overflow_check(op0_inf, op1_inf, not_exprt(new_inf));
738729

@@ -791,11 +782,11 @@ void goto_checkt::nan_check(
791782
// there a two ways to get a new NaN on division:
792783
// 0/0 = NaN and x/inf = NaN
793784
// (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(
795786
ieee_float_equal_exprt(expr.op0(), from_integer(0, expr.op0().type())),
796787
ieee_float_equal_exprt(expr.op1(), from_integer(0, expr.op1().type())));
797788

798-
exprt div_inf=unary_exprt(ID_isinf, expr.op1(), bool_typet());
789+
const isinf_exprt div_inf(expr.op1());
799790

800791
isnan=or_exprt(zero_div_zero, div_inf);
801792
}
@@ -807,13 +798,13 @@ void goto_checkt::nan_check(
807798
assert(expr.operands().size()==2);
808799

809800
// 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()),
812803
ieee_float_equal_exprt(expr.op1(), from_integer(0, expr.op1().type())));
813804

814-
exprt zero_times_inf=and_exprt(
805+
const and_exprt zero_times_inf(
815806
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()));
817808

818809
isnan=or_exprt(inf_times_zero, zero_times_inf);
819810
}
@@ -1055,13 +1046,9 @@ void goto_checkt::pointer_validity_check(
10551046

10561047
if(flags.is_unknown() || flags.is_dynamic_heap())
10571048
{
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));
10651052

10661053
add_guarded_claim(
10671054
or_exprt(
@@ -1080,13 +1067,9 @@ void goto_checkt::pointer_validity_check(
10801067
flags.is_dynamic_local() ||
10811068
flags.is_static_lifetime())
10821069
{
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));
10901073

10911074
add_guarded_claim(
10921075
or_exprt(allocs, dynamic_object(pointer), not_exprt(object_bounds)),
@@ -1672,12 +1655,11 @@ void goto_checkt::goto_check(
16721655
exprt lhs=ns.lookup(CPROVER_PREFIX "dead_object").symbol_expr();
16731656
if(!base_type_eq(lhs.type(), address_of_expr.type(), ns))
16741657
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());
16811663
t->source_location=i.source_location;
16821664
t->code=code_assignt(lhs, rhs);
16831665
t->code.add_source_location()=i.source_location;

src/analyses/invariant_propagation.cpp

+3-8
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,10 @@ void invariant_propagationt::get_objects_rec(
9898
{
9999
const struct_typet &struct_type=to_struct_type(t);
100100

101-
const struct_typet::componentst &c=struct_type.components();
102-
103-
exprt member_expr(ID_member);
104-
member_expr.copy_to_operands(src);
105-
106-
for(const auto &component : c)
101+
for(const auto &component : struct_type.components())
107102
{
108-
member_expr.set(ID_component_name, component.get_name());
109-
member_expr.type()=component.type();
103+
const member_exprt member_expr(
104+
src, component.get_name(), component.type());
110105
// recursive call
111106
get_objects_rec(member_expr, dest);
112107
}

src/analyses/invariant_set.cpp

+7-21
Original file line numberDiff line numberDiff line change
@@ -491,23 +491,15 @@ void invariant_sett::strengthen_rec(const exprt &expr)
491491
{
492492
const struct_typet &struct_type=to_struct_type(op_type);
493493

494-
exprt lhs_member_expr(ID_member);
495-
exprt rhs_member_expr(ID_member);
496-
lhs_member_expr.copy_to_operands(expr.op0());
497-
rhs_member_expr.copy_to_operands(expr.op1());
498494

499495
for(const auto &comp : struct_type.components())
500496
{
501-
const irep_idt &component_name=comp.get(ID_name);
497+
const member_exprt lhs_member_expr(
498+
expr.op0(), comp.get_name(), comp.type());
499+
const member_exprt rhs_member_expr(
500+
expr.op1(), comp.get_name(), comp.type());
502501

503-
lhs_member_expr.set(ID_component_name, component_name);
504-
rhs_member_expr.set(ID_component_name, component_name);
505-
lhs_member_expr.type()=comp.type();
506-
rhs_member_expr.type()=comp.type();
507-
508-
equal_exprt equality;
509-
equality.lhs()=lhs_member_expr;
510-
equality.rhs()=rhs_member_expr;
502+
const equal_exprt equality(lhs_member_expr, rhs_member_expr);
511503

512504
// recursive call
513505
strengthen_rec(equality);
@@ -870,11 +862,7 @@ exprt invariant_sett::get_constant(const exprt &expr) const
870862
if(expr.type().id()==ID_pointer)
871863
{
872864
if(value==0)
873-
{
874-
exprt tmp(ID_constant, expr.type());
875-
tmp.set(ID_value, ID_NULL);
876-
return tmp;
877-
}
865+
return null_pointer_exprt(to_pointer_type(expr.type()));
878866
}
879867
else
880868
return from_integer(value, expr.type());
@@ -884,9 +872,7 @@ exprt invariant_sett::get_constant(const exprt &expr) const
884872
if(e.type()==expr.type())
885873
return e;
886874

887-
exprt tmp(ID_typecast, expr.type());
888-
tmp.copy_to_operands(e);
889-
return tmp;
875+
return typecast_exprt(e, expr.type());
890876
}
891877
}
892878
}

0 commit comments

Comments
 (0)