Skip to content

Commit 31ce11f

Browse files
committed
Make from_integer fail an assertion for unsupported types
Prompts a fix in java bytecode conversion.
1 parent cf06f35 commit 31ce11f

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,9 +1240,11 @@ codet java_bytecode_convert_methodt::convert_instructions(
12401240
irep_idt number=to_constant_expr(arg0).get_value();
12411241
code_gotot code_goto(label(number));
12421242
c=code_goto;
1243-
results[0]=from_integer(
1244-
std::next(i_it)->address,
1245-
pointer_typet(void_typet(), 64));
1243+
results[0]=
1244+
from_integer(
1245+
std::next(i_it)->address,
1246+
unsignedbv_typet(64));
1247+
results[0].type()=pointer_typet(void_typet(), 64);
12461248
}
12471249
else if(statement=="ret")
12481250
{
@@ -1263,9 +1265,11 @@ codet java_bytecode_convert_methodt::convert_instructions(
12631265
else
12641266
{
12651267
code_ifthenelset branch;
1266-
auto address_ptr=from_integer(
1267-
jsr_ret_targets[idx],
1268-
pointer_typet(void_typet(), 64));
1268+
auto address_ptr=
1269+
from_integer(
1270+
jsr_ret_targets[idx],
1271+
unsignedbv_typet(64));
1272+
address_ptr.type()=pointer_typet(void_typet(), 64);
12691273
branch.cond()=equal_exprt(retvar, address_ptr);
12701274
branch.cond().add_source_location()=i_it->source_location;
12711275
branch.then_case()=g;

src/util/arith_tools.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ constant_exprt from_integer(
213213
}
214214

215215
{
216+
assert(false);
216217
constant_exprt r;
217218
r.make_nil();
218219
return r;

src/util/arith_tools.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bool to_integer(const exprt &expr, mp_integer &int_value);
2222
// returns 'true' on error
2323
bool to_integer(const constant_exprt &expr, mp_integer &int_value);
2424

25-
// returns 'nil' on error
25+
// assert(false) in case of unsupported type
2626
constant_exprt from_integer(const mp_integer &int_value, const typet &type);
2727

2828
// ceil(log2(size))

0 commit comments

Comments
 (0)