Skip to content

Commit 0547b72

Browse files
tautschnigPetr Bauch
authored and
Petr Bauch
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 8cd3d27 commit 0547b72

23 files changed

+87
-161
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 char16_t int_value = numeric_cast_v<char16_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
@@ -1331,19 +1327,15 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
13311327
else if(statement=="goto" || statement=="goto_w")
13321328
{
13331329
PRECONDITION(op.empty() && results.empty());
1334-
mp_integer number;
1335-
bool ret=to_integer(to_constant_expr(arg0), number);
1336-
INVARIANT(!ret, "goto argument should be an integer");
1330+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13371331
code_gotot code_goto(label(integer2string(number)));
13381332
c=code_goto;
13391333
}
13401334
else if(statement=="jsr" || statement=="jsr_w")
13411335
{
13421336
// As 'goto', except we must also push the subroutine return address:
13431337
PRECONDITION(op.empty() && results.size() == 1);
1344-
mp_integer number;
1345-
bool ret=to_integer(to_constant_expr(arg0), number);
1346-
INVARIANT(!ret, "jsr argument should be an integer");
1338+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13471339
code_gotot code_goto(label(integer2string(number)));
13481340
c=code_goto;
13491341
results[0]=
@@ -1385,9 +1377,7 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
13851377
else if(statement==patternt("if_?cmp??"))
13861378
{
13871379
PRECONDITION(op.size() == 2 && results.empty());
1388-
mp_integer number;
1389-
bool ret=to_integer(to_constant_expr(arg0), number);
1390-
INVARIANT(!ret, "if_?cmp?? argument should be an integer");
1380+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13911381
c = convert_if_cmp(
13921382
address_map, statement, op, number, i_it->source_location);
13931383
}
@@ -1404,25 +1394,19 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
14041394

14051395
INVARIANT(!id.empty(), "unexpected bytecode-if");
14061396
PRECONDITION(op.size() == 1 && results.empty());
1407-
mp_integer number;
1408-
bool ret=to_integer(to_constant_expr(arg0), number);
1409-
INVARIANT(!ret, "if?? argument should be an integer");
1397+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14101398
c = convert_if(address_map, op, id, number, i_it->source_location);
14111399
}
14121400
else if(statement==patternt("ifnonnull"))
14131401
{
14141402
PRECONDITION(op.size() == 1 && results.empty());
1415-
mp_integer number;
1416-
bool ret=to_integer(to_constant_expr(arg0), number);
1417-
INVARIANT(!ret, "ifnonnull argument should be an integer");
1403+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14181404
c = convert_ifnonull(address_map, op, number, i_it->source_location);
14191405
}
14201406
else if(statement==patternt("ifnull"))
14211407
{
14221408
PRECONDITION(op.size() == 1 && results.empty());
1423-
mp_integer number;
1424-
bool ret=to_integer(to_constant_expr(arg0), number);
1425-
INVARIANT(!ret, "ifnull argument should be an integer");
1409+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14261410
c = convert_ifnull(address_map, op, number, i_it->source_location);
14271411
}
14281412
else if(statement=="iinc")
@@ -1619,10 +1603,7 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
16191603
{
16201604
// The first argument is the type, the second argument is the number of
16211605
// dimensions. The size of each dimension is on the stack.
1622-
mp_integer number;
1623-
bool ret=to_integer(to_constant_expr(arg1), number);
1624-
INVARIANT(!ret, "multianewarray argument should be an integer");
1625-
std::size_t dimension=integer2size_t(number);
1606+
const std::size_t dimension = numeric_cast_v<std::size_t>(arg1);
16261607

16271608
op=pop(dimension);
16281609
assert(results.size()==1);
@@ -1953,9 +1934,7 @@ code_switcht java_bytecode_convert_methodt::convert_switch(
19531934
code_switch_caset code_case;
19541935
code_case.add_source_location() = location;
19551936

1956-
mp_integer number;
1957-
bool ret = to_integer(to_constant_expr(*a_it), number);
1958-
DATA_INVARIANT(!ret, "case label expected to be integer");
1937+
const mp_integer number = numeric_cast_v<mp_integer>(*a_it);
19591938
// The switch case does not contain any code, it just branches via a GOTO
19601939
// to the jump target of the tableswitch/lookupswitch case at
19611940
// hand. Therefore we consider this code to belong to the source bytecode
@@ -2073,9 +2052,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20732052
ieee_floatt value(spec);
20742053
if(arg0.type().id() != ID_floatbv)
20752054
{
2076-
mp_integer number;
2077-
bool ret = to_integer(to_constant_expr(arg0), number);
2078-
DATA_INVARIANT(!ret, "failed to convert constant");
2055+
const mp_integer number = numeric_cast_v<mp_integer>(arg0);
20792056
value.from_integer(number);
20802057
}
20812058
else
@@ -2085,9 +2062,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20852062
}
20862063
else
20872064
{
2088-
mp_integer value;
2089-
bool ret = to_integer(to_constant_expr(arg0), value);
2090-
DATA_INVARIANT(!ret, "failed to convert constant");
2065+
const mp_integer value = numeric_cast_v<mp_integer>(arg0);
20912066
const typet type = java_type_from_char(statement[0]);
20922067
results[0] = from_integer(value, type);
20932068
}

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
@@ -254,8 +254,7 @@ void interval_domaint::assume_rec(
254254

255255
if(is_int(lhs.type()) && is_int(rhs.type()))
256256
{
257-
mp_integer tmp;
258-
to_integer(rhs, tmp);
257+
mp_integer tmp = numeric_cast_v<mp_integer>(rhs);
259258
if(id==ID_lt)
260259
--tmp;
261260
integer_intervalt &ii=int_map[lhs_identifier];
@@ -280,8 +279,7 @@ void interval_domaint::assume_rec(
280279

281280
if(is_int(lhs.type()) && is_int(rhs.type()))
282281
{
283-
mp_integer tmp;
284-
to_integer(lhs, tmp);
282+
mp_integer tmp = numeric_cast_v<mp_integer>(lhs);
285283
if(id==ID_lt)
286284
++tmp;
287285
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(tmp.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+
const 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: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,13 @@ 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)
206+
const auto i = numeric_cast<mp_integer>(expr);
207+
if(i.has_value() && *i >= 0)
208208
{
209209
if(options.hex_representation)
210-
return "0x" + integer2string(i, 16);
210+
return "0x" + integer2string(*i, 16);
211211
else
212-
return "0b" + integer2string(i, 2);
212+
return "0b" + integer2string(*i, 2);
213213
}
214214
}
215215
}

0 commit comments

Comments
 (0)