Skip to content

Commit 82ab567

Browse files
authored
Merge pull request diffblue#3972 from diffblue/opX-cleanup
avoid direct access to exprt::opX()
2 parents 51d8243 + d066e88 commit 82ab567

7 files changed

+81
-78
lines changed

src/ansi-c/c_typecheck_expr.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ void c_typecheck_baset::add_rounding_mode(exprt &expr)
8181
else
8282
UNREACHABLE;
8383

84-
expr.op2()=from_integer(0, unsigned_int_type());
84+
to_ieee_float_op_expr(expr).rounding_mode() =
85+
from_integer(0, unsigned_int_type());
8586
}
8687
}
8788
}

src/ansi-c/expr2c.cpp

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -782,14 +782,11 @@ std::string expr2ct::convert_typecast(
782782
}
783783

784784
std::string expr2ct::convert_trinary(
785-
const exprt &src,
785+
const ternary_exprt &src,
786786
const std::string &symbol1,
787787
const std::string &symbol2,
788788
unsigned precedence)
789789
{
790-
if(src.operands().size()!=3)
791-
return convert_norep(src, precedence);
792-
793790
const exprt &op0=src.op0();
794791
const exprt &op1=src.op1();
795792
const exprt &op2=src.op2();
@@ -3346,18 +3343,14 @@ std::string expr2ct::convert_extractbit(
33463343
return dest;
33473344
}
33483345

3349-
std::string expr2ct::convert_extractbits(
3350-
const exprt &src,
3351-
unsigned precedence)
3346+
std::string
3347+
expr2ct::convert_extractbits(const extractbits_exprt &src, unsigned precedence)
33523348
{
3353-
if(src.operands().size()!=3)
3354-
return convert_norep(src, precedence);
3355-
3356-
std::string dest=convert_with_precedence(src.op0(), precedence);
3349+
std::string dest = convert_with_precedence(src.src(), precedence);
33573350
dest+='[';
3358-
dest+=convert_with_precedence(src.op1(), precedence);
3351+
dest += convert_with_precedence(src.upper(), precedence);
33593352
dest+=", ";
3360-
dest+=convert_with_precedence(src.op2(), precedence);
3353+
dest += convert_with_precedence(src.lower(), precedence);
33613354
dest+=']';
33623355

33633356
return dest;
@@ -3758,7 +3751,7 @@ std::string expr2ct::convert_with_precedence(
37583751
return convert_binary(src, "==>", precedence=3, true);
37593752

37603753
else if(src.id()==ID_if)
3761-
return convert_trinary(src, "?", ":", precedence=3);
3754+
return convert_trinary(to_if_expr(src), "?", ":", precedence = 3);
37623755

37633756
else if(src.id()==ID_forall)
37643757
return convert_quantifier(src, "forall", precedence=2);
@@ -3864,7 +3857,7 @@ std::string expr2ct::convert_with_precedence(
38643857
return convert_extractbit(src, precedence);
38653858

38663859
else if(src.id()==ID_extractbits)
3867-
return convert_extractbits(src, precedence);
3860+
return convert_extractbits(to_extractbits_expr(src), precedence);
38683861

38693862
else if(src.id()==ID_initializer_list ||
38703863
src.id()==ID_compound_literal)

src/ansi-c/expr2c_class.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,10 @@ class expr2ct
118118
std::string convert_array_of(const exprt &src, unsigned precedence);
119119

120120
std::string convert_trinary(
121-
const exprt &src, const std::string &symbol1,
122-
const std::string &symbol2, unsigned precedence);
121+
const ternary_exprt &src,
122+
const std::string &symbol1,
123+
const std::string &symbol2,
124+
unsigned precedence);
123125

124126
std::string convert_overflow(
125127
const exprt &src, unsigned &precedence);
@@ -155,9 +157,8 @@ class expr2ct
155157
const exprt &src,
156158
unsigned precedence);
157159

158-
std::string convert_extractbits(
159-
const exprt &src,
160-
unsigned precedence);
160+
std::string
161+
convert_extractbits(const extractbits_exprt &src, unsigned precedence);
161162

162163
std::string convert_unary(
163164
const exprt &src, const std::string &symbol,

src/util/simplify_expr.cpp

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -65,26 +65,26 @@ bool simplify_exprt::simplify_abs(exprt &expr)
6565
if(expr.operands().size()!=1)
6666
return true;
6767

68-
if(expr.op0().is_constant())
68+
if(to_unary_expr(expr).op().is_constant())
6969
{
70-
const typet &type = expr.op0().type();
70+
const typet &type = to_unary_expr(expr).op().type();
7171

7272
if(type.id()==ID_floatbv)
7373
{
74-
ieee_floatt value(to_constant_expr(expr.op0()));
74+
ieee_floatt value(to_constant_expr(to_unary_expr(expr).op()));
7575
value.set_sign(false);
7676
expr=value.to_expr();
7777
return false;
7878
}
7979
else if(type.id()==ID_signedbv ||
8080
type.id()==ID_unsignedbv)
8181
{
82-
auto value = numeric_cast<mp_integer>(expr.op0());
82+
auto value = numeric_cast<mp_integer>(to_unary_expr(expr).op());
8383
if(value.has_value())
8484
{
8585
if(*value >= 0)
8686
{
87-
expr=expr.op0();
87+
expr = to_unary_expr(expr).op();
8888
return false;
8989
}
9090
else
@@ -1221,55 +1221,56 @@ bool simplify_exprt::simplify_with(exprt &expr)
12211221
if((expr.operands().size()%2)!=1)
12221222
return true;
12231223

1224-
const typet op0_type=ns.follow(expr.op0().type());
1224+
auto &with_expr = to_with_expr(expr);
1225+
1226+
const typet old_type_followed = ns.follow(with_expr.old().type());
12251227

12261228
// now look at first operand
12271229

1228-
if(op0_type.id()==ID_struct)
1230+
if(old_type_followed.id() == ID_struct)
12291231
{
1230-
if(expr.op0().id()==ID_struct ||
1231-
expr.op0().id()==ID_constant)
1232+
if(with_expr.old().id() == ID_struct || with_expr.old().id() == ID_constant)
12321233
{
1233-
while(expr.operands().size()>1)
1234+
while(with_expr.operands().size() > 1)
12341235
{
1235-
const irep_idt &component_name=
1236-
expr.op1().get(ID_component_name);
1236+
const irep_idt &component_name =
1237+
with_expr.where().get(ID_component_name);
12371238

1238-
if(!to_struct_type(op0_type).
1239-
has_component(component_name))
1239+
if(!to_struct_type(old_type_followed).has_component(component_name))
12401240
return result;
12411241

1242-
std::size_t number=to_struct_type(op0_type).
1243-
component_number(component_name);
1242+
std::size_t number =
1243+
to_struct_type(old_type_followed).component_number(component_name);
12441244

1245-
expr.op0().operands()[number].swap(expr.op2());
1245+
with_expr.old().operands()[number].swap(with_expr.new_value());
12461246

1247-
expr.operands().erase(++expr.operands().begin());
1248-
expr.operands().erase(++expr.operands().begin());
1247+
with_expr.operands().erase(++with_expr.operands().begin());
1248+
with_expr.operands().erase(++with_expr.operands().begin());
12491249

12501250
result=false;
12511251
}
12521252
}
12531253
}
1254-
else if(expr.op0().type().id()==ID_array)
1254+
else if(with_expr.old().type().id() == ID_array)
12551255
{
12561256
if(expr.op0().id()==ID_array ||
12571257
expr.op0().id()==ID_constant)
12581258
{
12591259
while(expr.operands().size()>1)
12601260
{
1261-
const auto i = numeric_cast<mp_integer>(expr.op1());
1261+
const auto i = numeric_cast<mp_integer>(with_expr.where());
12621262

12631263
if(!i.has_value())
12641264
break;
12651265

1266-
if(*i < 0 || *i >= expr.op0().operands().size())
1266+
if(*i < 0 || *i >= with_expr.old().operands().size())
12671267
break;
12681268

1269-
expr.op0().operands()[numeric_cast_v<std::size_t>(*i)].swap(expr.op2());
1269+
with_expr.old().operands()[numeric_cast_v<std::size_t>(*i)].swap(
1270+
with_expr.new_value());
12701271

1271-
expr.operands().erase(++expr.operands().begin());
1272-
expr.operands().erase(++expr.operands().begin());
1272+
with_expr.operands().erase(++with_expr.operands().begin());
1273+
with_expr.operands().erase(++with_expr.operands().begin());
12731274

12741275
result=false;
12751276
}
@@ -1663,24 +1664,27 @@ bool simplify_exprt::simplify_byte_extract(byte_extract_exprt &expr)
16631664

16641665
// byte_extract(byte_update(root, offset, value), offset) =>
16651666
// value
1666-
if(((expr.id()==ID_byte_extract_big_endian &&
1667-
expr.op().id()==ID_byte_update_big_endian) ||
1668-
(expr.id()==ID_byte_extract_little_endian &&
1669-
expr.op().id()==ID_byte_update_little_endian)) &&
1670-
expr.offset()==expr.op().op1())
1667+
if(
1668+
((expr.id() == ID_byte_extract_big_endian &&
1669+
expr.op().id() == ID_byte_update_big_endian) ||
1670+
(expr.id() == ID_byte_extract_little_endian &&
1671+
expr.op().id() == ID_byte_update_little_endian)) &&
1672+
expr.offset() == to_byte_update_expr(expr.op()).offset())
16711673
{
1672-
if(base_type_eq(expr.type(), expr.op().op2().type(), ns))
1674+
const auto &op_byte_update = to_byte_update_expr(expr.op());
1675+
1676+
if(base_type_eq(expr.type(), op_byte_update.value().type(), ns))
16731677
{
1674-
exprt tmp=expr.op().op2();
1678+
exprt tmp = op_byte_update.value();
16751679
expr.swap(tmp);
16761680

16771681
return false;
16781682
}
16791683
else if(
16801684
el_size.has_value() &&
1681-
*el_size <= pointer_offset_bits(expr.op().op2().type(), ns))
1685+
*el_size <= pointer_offset_bits(op_byte_update.value().type(), ns))
16821686
{
1683-
expr.op()=expr.op().op2();
1687+
expr.op() = op_byte_update.value();
16841688
expr.offset()=from_integer(0, expr.offset().type());
16851689

16861690
simplify_byte_extract(expr);
@@ -1811,9 +1815,11 @@ bool simplify_exprt::simplify_byte_update(byte_update_exprt &expr)
18111815
{
18121816
// byte_update(byte_update(root, offset, value), offset, value2) =>
18131817
// byte_update(root, offset, value2)
1814-
if(expr.id()==expr.op().id() &&
1815-
expr.offset()==expr.op().op1() &&
1816-
base_type_eq(expr.value().type(), expr.op().op2().type(), ns))
1818+
if(
1819+
expr.id() == expr.op().id() &&
1820+
expr.offset() == to_byte_update_expr(expr.op()).offset() &&
1821+
base_type_eq(
1822+
expr.value().type(), to_byte_update_expr(expr.op()).value().type(), ns))
18171823
{
18181824
expr.op()=expr.op().op0();
18191825
return false;

src/util/simplify_expr_array.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ bool simplify_exprt::simplify_index(exprt &expr)
6565
{
6666
// we have (a WITH [i:=e])[j]
6767

68-
const exprt &with_expr=array;
69-
70-
if(with_expr.operands().size()!=3)
68+
if(array.operands().size() != 3)
7169
return true;
7270

73-
if(with_expr.op1()==expr.op1())
71+
const auto &with_expr = to_with_expr(array);
72+
73+
if(with_expr.where() == expr.op1())
7474
{
7575
// simplify (e with [i:=v])[i] to v
76-
exprt tmp=with_expr.op2();
76+
exprt tmp = with_expr.new_value();
7777
expr.swap(tmp);
7878
return false;
7979
}
@@ -82,19 +82,19 @@ bool simplify_exprt::simplify_index(exprt &expr)
8282
// Turn (a with i:=x)[j] into (i==j)?x:a[j].
8383
// watch out that the type of i and j might be different.
8484
const exprt rhs_casted =
85-
typecast_exprt::conditional_cast(with_expr.op1(), expr.op1().type());
85+
typecast_exprt::conditional_cast(with_expr.where(), expr.op1().type());
8686

8787
equal_exprt equality_expr(expr.op1(), rhs_casted);
8888

8989
simplify_inequality(equality_expr);
9090

91-
index_exprt new_index_expr(with_expr.op0(), expr.op1(), expr.type());
91+
index_exprt new_index_expr(with_expr.old(), expr.op1(), expr.type());
9292

9393
simplify_index(new_index_expr); // recursive call
9494

9595
if(equality_expr.is_true())
9696
{
97-
expr=with_expr.op2();
97+
expr = with_expr.new_value();
9898
return false;
9999
}
100100
else if(equality_expr.is_false())
@@ -103,7 +103,7 @@ bool simplify_exprt::simplify_index(exprt &expr)
103103
return false;
104104
}
105105

106-
if_exprt if_expr(equality_expr, with_expr.op2(), new_index_expr);
106+
if_exprt if_expr(equality_expr, with_expr.new_value(), new_index_expr);
107107
simplify_if(if_expr);
108108

109109
expr.swap(if_expr);

src/util/simplify_expr_floatbv.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,9 +293,9 @@ bool simplify_exprt::simplify_floatbv_op(exprt &expr)
293293
"binary operations have two operands, here an addtional parameter "
294294
"is for the rounding mode");
295295

296-
exprt op0=expr.op0();
297-
exprt op1=expr.op1();
298-
exprt op2=expr.op2(); // rounding mode
296+
exprt op0 = to_ieee_float_op_expr(expr).lhs();
297+
exprt op1 = to_ieee_float_op_expr(expr).rhs();
298+
exprt op2 = to_ieee_float_op_expr(expr).rounding_mode(); // rounding mode
299299

300300
INVARIANT(
301301
op0.type() == type,

src/util/simplify_expr_pointer.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -142,26 +142,28 @@ bool simplify_exprt::simplify_address_of_arg(exprt &expr)
142142
if(expr.operands().size()==3)
143143
{
144144
bool result=true;
145-
if(!simplify_rec(expr.op0()))
145+
auto &if_expr = to_if_expr(expr);
146+
147+
if(!simplify_rec(if_expr.cond()))
146148
result=false;
147-
if(!simplify_address_of_arg(expr.op1()))
149+
if(!simplify_address_of_arg(if_expr.true_case()))
148150
result=false;
149-
if(!simplify_address_of_arg(expr.op2()))
151+
if(!simplify_address_of_arg(if_expr.false_case()))
150152
result=false;
151153

152-
// op0 is a constant?
153-
if(expr.op0().is_true())
154+
// condition is a constant?
155+
if(if_expr.cond().is_true())
154156
{
155157
result=false;
156158
exprt tmp;
157-
tmp.swap(expr.op1());
159+
tmp.swap(if_expr.true_case());
158160
expr.swap(tmp);
159161
}
160-
else if(expr.op0().is_false())
162+
else if(if_expr.cond().is_false())
161163
{
162164
result=false;
163165
exprt tmp;
164-
tmp.swap(expr.op2());
166+
tmp.swap(if_expr.false_case());
165167
expr.swap(tmp);
166168
}
167169

0 commit comments

Comments
 (0)