Skip to content

Commit 6a6a684

Browse files
committed
Use numeric_cast<mp_integer> instead of deprecated to_integer(exprt), part 2
This further reduces the number of warnings flagged, in particular in Visual-Studio builds. Also turn tests of the size of ID_vector types being constants into invariants as was already done in some places.
1 parent 3028bf8 commit 6a6a684

File tree

23 files changed

+83
-159
lines changed

23 files changed

+83
-159
lines changed

jbmc/src/java_bytecode/expr2java.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -191,41 +191,33 @@ std::string expr2javat::convert_constant(
191191
std::string dest;
192192
dest.reserve(char_representation_length);
193193

194-
mp_integer int_value;
195-
if(to_integer(src, int_value))
196-
UNREACHABLE;
194+
const wchar_t int_value = numeric_cast_v<wchar_t>(src);
197195

198196
// Character literals in Java have type 'char', thus no cast is needed.
199197
// This is different from C, where charater literals have type 'int'.
200-
dest += '\'' + utf16_native_endian_to_java(int_value.to_long()) + '\'';
198+
dest += '\'' + utf16_native_endian_to_java(int_value) + '\'';
201199
return dest;
202200
}
203201
else if(src.type()==java_byte_type())
204202
{
205203
// No byte-literals in Java, so just cast:
206-
mp_integer int_value;
207-
if(to_integer(src, int_value))
208-
UNREACHABLE;
204+
const mp_integer int_value = numeric_cast_v<mp_integer>(src);
209205
std::string dest="(byte)";
210206
dest+=integer2string(int_value);
211207
return dest;
212208
}
213209
else if(src.type()==java_short_type())
214210
{
215211
// No short-literals in Java, so just cast:
216-
mp_integer int_value;
217-
if(to_integer(src, int_value))
218-
UNREACHABLE;
212+
const mp_integer int_value = numeric_cast_v<mp_integer>(src);
219213
std::string dest="(short)";
220214
dest+=integer2string(int_value);
221215
return dest;
222216
}
223217
else if(src.type()==java_long_type())
224218
{
225219
// long integer literals must have 'L' at the end
226-
mp_integer int_value;
227-
if(to_integer(src, int_value))
228-
UNREACHABLE;
220+
const mp_integer int_value = numeric_cast_v<mp_integer>(src);
229221
std::string dest=integer2string(int_value);
230222
dest+='L';
231223
return dest;

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,8 @@ const exprt java_bytecode_convert_methodt::variable(
210210
size_t address,
211211
java_bytecode_convert_methodt::variable_cast_argumentt do_cast)
212212
{
213-
mp_integer number;
214-
bool ret=to_integer(to_constant_expr(arg), number);
215-
CHECK_RETURN(!ret);
216-
217-
std::size_t number_int=integer2size_t(number);
218213
typet t=java_type_from_char(type_char);
214+
const std::size_t number_int = numeric_cast_v<std::size_t>(arg);
219215
variablest &var_list=variables[number_int];
220216

221217
// search variable in list for correct frame / address if necessary
@@ -1332,19 +1328,15 @@ codet java_bytecode_convert_methodt::convert_instructions(
13321328
else if(statement=="goto" || statement=="goto_w")
13331329
{
13341330
PRECONDITION(op.empty() && results.empty());
1335-
mp_integer number;
1336-
bool ret=to_integer(to_constant_expr(arg0), number);
1337-
INVARIANT(!ret, "goto argument should be an integer");
1331+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13381332
code_gotot code_goto(label(integer2string(number)));
13391333
c=code_goto;
13401334
}
13411335
else if(statement=="jsr" || statement=="jsr_w")
13421336
{
13431337
// As 'goto', except we must also push the subroutine return address:
13441338
PRECONDITION(op.empty() && results.size() == 1);
1345-
mp_integer number;
1346-
bool ret=to_integer(to_constant_expr(arg0), number);
1347-
INVARIANT(!ret, "jsr argument should be an integer");
1339+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13481340
code_gotot code_goto(label(integer2string(number)));
13491341
c=code_goto;
13501342
results[0]=
@@ -1386,9 +1378,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
13861378
else if(statement==patternt("if_?cmp??"))
13871379
{
13881380
PRECONDITION(op.size() == 2 && results.empty());
1389-
mp_integer number;
1390-
bool ret=to_integer(to_constant_expr(arg0), number);
1391-
INVARIANT(!ret, "if_?cmp?? argument should be an integer");
1381+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13921382
c = convert_if_cmp(
13931383
address_map, statement, op, number, i_it->source_location);
13941384
}
@@ -1405,25 +1395,19 @@ codet java_bytecode_convert_methodt::convert_instructions(
14051395

14061396
INVARIANT(!id.empty(), "unexpected bytecode-if");
14071397
PRECONDITION(op.size() == 1 && results.empty());
1408-
mp_integer number;
1409-
bool ret=to_integer(to_constant_expr(arg0), number);
1410-
INVARIANT(!ret, "if?? argument should be an integer");
1398+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14111399
c = convert_if(address_map, op, id, number, i_it->source_location);
14121400
}
14131401
else if(statement==patternt("ifnonnull"))
14141402
{
14151403
PRECONDITION(op.size() == 1 && results.empty());
1416-
mp_integer number;
1417-
bool ret=to_integer(to_constant_expr(arg0), number);
1418-
INVARIANT(!ret, "ifnonnull argument should be an integer");
1404+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14191405
c = convert_ifnonull(address_map, op, number, i_it->source_location);
14201406
}
14211407
else if(statement==patternt("ifnull"))
14221408
{
14231409
PRECONDITION(op.size() == 1 && results.empty());
1424-
mp_integer number;
1425-
bool ret=to_integer(to_constant_expr(arg0), number);
1426-
INVARIANT(!ret, "ifnull argument should be an integer");
1410+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14271411
c = convert_ifnull(address_map, op, number, i_it->source_location);
14281412
}
14291413
else if(statement=="iinc")
@@ -1620,10 +1604,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
16201604
{
16211605
// The first argument is the type, the second argument is the number of
16221606
// dimensions. The size of each dimension is on the stack.
1623-
mp_integer number;
1624-
bool ret=to_integer(to_constant_expr(arg1), number);
1625-
INVARIANT(!ret, "multianewarray argument should be an integer");
1626-
std::size_t dimension=integer2size_t(number);
1607+
const std::size_t dimension = numeric_cast_v<std::size_t>(arg1);
16271608

16281609
op=pop(dimension);
16291610
assert(results.size()==1);
@@ -1954,9 +1935,7 @@ codet java_bytecode_convert_methodt::convert_switch(
19541935
code_switch_caset code_case;
19551936
code_case.add_source_location() = location;
19561937

1957-
mp_integer number;
1958-
bool ret = to_integer(to_constant_expr(*a_it), number);
1959-
DATA_INVARIANT(!ret, "case label expected to be integer");
1938+
const mp_integer number = numeric_cast_v<mp_integer>(*a_it);
19601939
// The switch case does not contain any code, it just branches via a GOTO
19611940
// to the jump target of the tableswitch/lookupswitch case at
19621941
// hand. Therefore we consider this code to belong to the source bytecode
@@ -2074,9 +2053,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20742053
ieee_floatt value(spec);
20752054
if(arg0.type().id() != ID_floatbv)
20762055
{
2077-
mp_integer number;
2078-
bool ret = to_integer(to_constant_expr(arg0), number);
2079-
DATA_INVARIANT(!ret, "failed to convert constant");
2056+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
20802057
value.from_integer(number);
20812058
}
20822059
else
@@ -2086,9 +2063,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20862063
}
20872064
else
20882065
{
2089-
mp_integer value;
2090-
bool ret = to_integer(to_constant_expr(arg0), value);
2091-
DATA_INVARIANT(!ret, "failed to convert constant");
2066+
const mp_integer value = numeric_cast_v<mp_integer>(arg0);
20922067
const typet type = java_type_from_char(statement[0]);
20932068
results[0] = from_integer(value, type);
20942069
}

jbmc/unit/solvers/refinement/string_constraint_instantiation/instantiate_not_contains.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,7 @@ refined_string_exprt make_refined_string_exprt(const array_string_exprt &arr)
9090
/// \return the corresponding index set
9191
std::set<exprt> full_index_set(const array_string_exprt &s)
9292
{
93-
PRECONDITION(s.length().is_constant());
94-
mp_integer n;
95-
to_integer(s.length(), n);
93+
const mp_integer n = numeric_cast_v<mp_integer>(s.length());
9694
std::set<exprt> ret;
9795
for(mp_integer i=0; i<n; ++i)
9896
ret.insert(from_integer(i));

src/analyses/goto_check.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,13 +1110,9 @@ void goto_checkt::bounds_check(
11101110
}
11111111
else
11121112
{
1113-
mp_integer i;
1113+
const auto i = numeric_cast<mp_integer>(index);
11141114

1115-
if(!to_integer(index, i) && i>=0)
1116-
{
1117-
// ok
1118-
}
1119-
else
1115+
if(!i.has_value() || *i < 0)
11201116
{
11211117
exprt effective_offset=ode.offset();
11221118

src/analyses/goto_rw.cpp

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -181,18 +181,15 @@ void rw_range_sett::get_objects_shift(
181181

182182
range_spect src_size = op_bits.has_value() ? to_range_spect(*op_bits) : -1;
183183

184-
mp_integer dist;
185-
if(range_start==-1 ||
186-
size==-1 ||
187-
src_size==-1 ||
188-
to_integer(simp_distance, dist))
184+
const auto dist = numeric_cast<mp_integer>(simp_distance);
185+
if(range_start == -1 || size == -1 || src_size == -1 || !dist.has_value())
189186
{
190187
get_objects_rec(mode, shift.op(), -1, -1);
191188
get_objects_rec(mode, shift.distance(), -1, -1);
192189
}
193190
else
194191
{
195-
range_spect dist_r=to_range_spect(dist);
192+
const range_spect dist_r = to_range_spect(*dist);
196193

197194
// not sure whether to worry about
198195
// config.ansi_c.endianness==configt::ansi_ct::IS_LITTLE_ENDIAN
@@ -284,22 +281,17 @@ void rw_range_sett::get_objects_index(
284281

285282
const exprt simp_index=simplify_expr(expr.index(), ns);
286283

287-
mp_integer index;
288-
if(to_integer(simp_index, index))
289-
{
284+
const auto index = numeric_cast<mp_integer>(simp_index);
285+
if(!index.has_value())
290286
get_objects_rec(get_modet::READ, expr.index());
291-
index=-1;
292-
}
293287

294-
if(range_start==-1 ||
295-
sub_size==-1 ||
296-
index==-1)
288+
if(range_start == -1 || sub_size == -1 || !index.has_value())
297289
get_objects_rec(mode, expr.array(), -1, size);
298290
else
299291
get_objects_rec(
300292
mode,
301293
expr.array(),
302-
range_start+to_range_spect(index*sub_size),
294+
range_start + to_range_spect(*index * sub_size),
303295
size);
304296
}
305297

src/analyses/interval_domain.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,7 @@ void interval_domaint::assume_rec(
252252

253253
if(is_int(lhs.type()) && is_int(rhs.type()))
254254
{
255-
mp_integer tmp;
256-
to_integer(rhs, tmp);
255+
mp_integer tmp = numeric_cast_v<mp_integer>(rhs);
257256
if(id==ID_lt)
258257
--tmp;
259258
integer_intervalt &ii=int_map[lhs_identifier];
@@ -278,8 +277,7 @@ void interval_domaint::assume_rec(
278277

279278
if(is_int(lhs.type()) && is_int(rhs.type()))
280279
{
281-
mp_integer tmp;
282-
to_integer(lhs, tmp);
280+
mp_integer tmp = numeric_cast_v<mp_integer>(lhs);
283281
if(id==ID_lt)
284282
++tmp;
285283
integer_intervalt &ii=int_map[rhs_identifier];

src/analyses/invariant_set.cpp

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,9 @@ std::string inv_object_storet::build_string(const exprt &expr) const
123123
if(expr.get(ID_value)==ID_NULL)
124124
return "0";
125125

126-
mp_integer i;
127-
128-
if(!to_integer(expr, i))
129-
return integer2string(i);
126+
const auto i = numeric_cast<mp_integer>(expr);
127+
if(i.has_value())
128+
return integer2string(*i);
130129
}
131130

132131
// we also like "address_of" and "reference_to"
@@ -455,25 +454,24 @@ void invariant_sett::strengthen_rec(const exprt &expr)
455454
get_object(expr.op1(), p.second))
456455
return;
457456

458-
mp_integer i0, i1;
459-
bool have_i0=!to_integer(expr.op0(), i0);
460-
bool have_i1=!to_integer(expr.op1(), i1);
457+
const auto i0 = numeric_cast<mp_integer>(expr.op0());
458+
const auto i1 = numeric_cast<mp_integer>(expr.op1());
461459

462460
if(expr.id()==ID_le)
463461
{
464-
if(have_i0)
465-
add_bounds(p.second, lower_interval(i0));
466-
else if(have_i1)
467-
add_bounds(p.first, upper_interval(i1));
462+
if(i0.has_value())
463+
add_bounds(p.second, lower_interval(*i0));
464+
else if(i1.has_value())
465+
add_bounds(p.first, upper_interval(*i1));
468466
else
469467
add_le(p);
470468
}
471469
else if(expr.id()==ID_lt)
472470
{
473-
if(have_i0)
474-
add_bounds(p.second, lower_interval(i0+1));
475-
else if(have_i1)
476-
add_bounds(p.first, upper_interval(i1-1));
471+
if(i0.has_value())
472+
add_bounds(p.second, lower_interval(*i0 + 1));
473+
else if(i1.has_value())
474+
add_bounds(p.first, upper_interval(*i1 - 1));
477475
else
478476
{
479477
add_le(p);
@@ -553,12 +551,12 @@ void invariant_sett::strengthen_rec(const exprt &expr)
553551
get_object(expr.op1(), p.second))
554552
return;
555553

556-
mp_integer i;
557-
558-
if(!to_integer(expr.op0(), i))
559-
add_bounds(p.second, boundst(i));
560-
else if(!to_integer(expr.op1(), i))
561-
add_bounds(p.first, boundst(i));
554+
const auto i0 = numeric_cast<mp_integer>(expr.op0());
555+
const auto i1 = numeric_cast<mp_integer>(expr.op1());
556+
if(i0.has_value())
557+
add_bounds(p.second, boundst(*i0));
558+
else if(i1.has_value())
559+
add_bounds(p.first, boundst(*i1));
562560

563561
s=p;
564562
std::swap(s.first, s.second);
@@ -685,10 +683,10 @@ void invariant_sett::get_bounds(unsigned a, boundst &bounds) const
685683

686684
{
687685
const exprt &e_a=object_store->get_expr(a);
688-
mp_integer tmp;
689-
if(!to_integer(e_a, tmp))
686+
const auto tmp = numeric_cast<mp_integer>(e_a);
687+
if(e_a.has_value())
690688
{
691-
bounds=boundst(tmp);
689+
bounds = boundst(*tmp);
692690
return;
693691
}
694692

@@ -858,8 +856,7 @@ exprt invariant_sett::get_constant(const exprt &expr) const
858856

859857
if(e.is_constant())
860858
{
861-
mp_integer value;
862-
assert(!to_integer(e, value));
859+
mp_integer value = numeric_cast_v<mp_integer>(e);
863860

864861
if(expr.type().id()==ID_pointer)
865862
{

src/ansi-c/expr2c.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -618,9 +618,7 @@ std::string expr2ct::convert_rec(
618618
{
619619
const vector_typet &vector_type=to_vector_type(src);
620620

621-
mp_integer size_int;
622-
to_integer(vector_type.size(), size_int);
623-
621+
const mp_integer size_int = numeric_cast_v<mp_integer>(vector_type.size());
624622
std::string dest="__gcc_v"+integer2string(size_int);
625623

626624
std::string tmp=convert(vector_type.subtype());

src/cpp/cpp_typecheck_initializer.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,7 @@ void cpp_typecheckt::zero_initializer(
225225
if(size_expr.id()==ID_infinity)
226226
return; // don't initialize
227227

228-
mp_integer size;
229-
230-
bool to_int=to_integer(size_expr, size);
231-
CHECK_RETURN(!to_int);
228+
const mp_integer size = numeric_cast_v<mp_integer>(size_expr);
232229
CHECK_RETURN(size>=0);
233230

234231
exprt::operandst empty_operands;

src/goto-programs/goto_trace.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,9 @@ std::string trace_numeric_value(
203203
}
204204
else if(type.id()==ID_integer)
205205
{
206-
mp_integer i;
207-
if(!to_integer(expr, i) && i>=0)
208-
return integer2string(i, 2);
206+
const auto i = numeric_cast<mp_integer>(expr);
207+
if(i.has_value() && *i >= 0)
208+
return integer2string(*i, 2);
209209
}
210210
}
211211
else if(expr.id()==ID_array)

0 commit comments

Comments
 (0)