Skip to content

Commit 11773eb

Browse files
author
Daniel Kroening
authored
Merge pull request #649 from cristina-david/remove-disable-runtime-checks
Remove the disable-runtime-checks flag for Java
2 parents cba259c + 0314b24 commit 11773eb

7 files changed

+51
-94
lines changed

src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,12 @@ class java_bytecode_convert_classt:public messaget
2727
java_bytecode_convert_classt(
2828
symbol_tablet &_symbol_table,
2929
message_handlert &_message_handler,
30-
bool _disable_runtime_checks,
3130
size_t _max_array_length,
3231
lazy_methodst& _lazy_methods,
3332
lazy_methods_modet _lazy_methods_mode,
3433
bool _string_refinement_enabled):
3534
messaget(_message_handler),
3635
symbol_table(_symbol_table),
37-
disable_runtime_checks(_disable_runtime_checks),
3836
max_array_length(_max_array_length),
3937
lazy_methods(_lazy_methods),
4038
lazy_methods_mode(_lazy_methods_mode),
@@ -60,7 +58,6 @@ class java_bytecode_convert_classt:public messaget
6058

6159
protected:
6260
symbol_tablet &symbol_table;
63-
const bool disable_runtime_checks;
6461
const size_t max_array_length;
6562
lazy_methodst &lazy_methods;
6663
lazy_methods_modet lazy_methods_mode;
@@ -169,7 +166,6 @@ void java_bytecode_convert_classt::convert(const classt &c)
169166
method,
170167
symbol_table,
171168
get_message_handler(),
172-
disable_runtime_checks,
173169
max_array_length);
174170
}
175171
else
@@ -364,7 +360,6 @@ bool java_bytecode_convert_class(
364360
const java_bytecode_parse_treet &parse_tree,
365361
symbol_tablet &symbol_table,
366362
message_handlert &message_handler,
367-
bool disable_runtime_checks,
368363
size_t max_array_length,
369364
lazy_methodst &lazy_methods,
370365
lazy_methods_modet lazy_methods_mode,
@@ -373,7 +368,6 @@ bool java_bytecode_convert_class(
373368
java_bytecode_convert_classt java_bytecode_convert_class(
374369
symbol_table,
375370
message_handler,
376-
disable_runtime_checks,
377371
max_array_length,
378372
lazy_methods,
379373
lazy_methods_mode,

src/java_bytecode/java_bytecode_convert_class.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ bool java_bytecode_convert_class(
1919
const java_bytecode_parse_treet &parse_tree,
2020
symbol_tablet &symbol_table,
2121
message_handlert &message_handler,
22-
bool disable_runtime_checks,
2322
size_t max_array_length,
2423
lazy_methodst &,
2524
lazy_methods_modet,

src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 51 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,20 +1084,17 @@ codet java_bytecode_convert_methodt::convert_instructions(
10841084
{
10851085
assert(op.size()==1 && results.size()==1);
10861086
code_blockt block;
1087-
if(!disable_runtime_checks)
1088-
{
1089-
// TODO throw NullPointerException instead
1090-
const typecast_exprt lhs(op[0], pointer_typet(empty_typet()));
1091-
const exprt rhs(null_pointer_exprt(to_pointer_type(lhs.type())));
1092-
const exprt not_equal_null(
1093-
binary_relation_exprt(lhs, ID_notequal, rhs));
1094-
code_assertt check(not_equal_null);
1095-
check.add_source_location()
1096-
.set_comment("Throw null");
1097-
check.add_source_location()
1098-
.set_property_class("null-pointer-exception");
1099-
block.move_to_operands(check);
1100-
}
1087+
// TODO throw NullPointerException instead
1088+
const typecast_exprt lhs(op[0], pointer_typet(empty_typet()));
1089+
const exprt rhs(null_pointer_exprt(to_pointer_type(lhs.type())));
1090+
const exprt not_equal_null(
1091+
binary_relation_exprt(lhs, ID_notequal, rhs));
1092+
code_assertt check(not_equal_null);
1093+
check.add_source_location()
1094+
.set_comment("Throw null");
1095+
check.add_source_location()
1096+
.set_property_class("null-pointer-exception");
1097+
block.move_to_operands(check);
11011098

11021099
side_effect_expr_throwt throw_expr;
11031100
throw_expr.add_source_location()=i_it->source_location;
@@ -1110,20 +1107,15 @@ codet java_bytecode_convert_methodt::convert_instructions(
11101107
}
11111108
else if(statement=="checkcast")
11121109
{
1113-
if(!disable_runtime_checks)
1114-
{
1115-
// checkcast throws an exception in case a cast of object
1116-
// on stack to given type fails.
1117-
// The stack isn't modified.
1118-
// TODO: convert assertions to exceptions.
1119-
assert(op.size()==1 && results.size()==1);
1120-
binary_predicate_exprt check(op[0], ID_java_instanceof, arg0);
1121-
c=code_assertt(check);
1122-
c.add_source_location().set_comment("Dynamic cast check");
1123-
c.add_source_location().set_property_class("bad-dynamic-cast");
1124-
}
1125-
else
1126-
c=code_skipt();
1110+
// checkcast throws an exception in case a cast of object
1111+
// on stack to given type fails.
1112+
// The stack isn't modified.
1113+
// TODO: convert assertions to exceptions.
1114+
assert(op.size()==1 && results.size()==1);
1115+
binary_predicate_exprt check(op[0], ID_java_instanceof, arg0);
1116+
c=code_assertt(check);
1117+
c.add_source_location().set_comment("Dynamic cast check");
1118+
c.add_source_location().set_property_class("bad-dynamic-cast");
11271119

11281120
results[0]=op[0];
11291121
}
@@ -1308,13 +1300,10 @@ codet java_bytecode_convert_methodt::convert_instructions(
13081300
const dereference_exprt element(data_plus_offset, element_type);
13091301

13101302
c=code_blockt();
1311-
if(!disable_runtime_checks)
1312-
{
1313-
codet bounds_check=
1314-
get_array_bounds_check(deref, op[1], i_it->source_location);
1315-
bounds_check.add_source_location()=i_it->source_location;
1316-
c.move_to_operands(bounds_check);
1317-
}
1303+
codet bounds_check=
1304+
get_array_bounds_check(deref, op[1], i_it->source_location);
1305+
bounds_check.add_source_location()=i_it->source_location;
1306+
c.move_to_operands(bounds_check);
13181307
code_assignt array_put(element, op[2]);
13191308
array_put.add_source_location()=i_it->source_location;
13201309
c.move_to_operands(array_put);
@@ -1354,11 +1343,8 @@ codet java_bytecode_convert_methodt::convert_instructions(
13541343
typet element_type=data_ptr.type().subtype();
13551344
dereference_exprt element(data_plus_offset, element_type);
13561345

1357-
if(!disable_runtime_checks)
1358-
{
1359-
c=get_array_bounds_check(deref, op[1], i_it->source_location);
1360-
c.add_source_location()=i_it->source_location;
1361-
}
1346+
c=get_array_bounds_check(deref, op[1], i_it->source_location);
1347+
c.add_source_location()=i_it->source_location;
13621348
results[0]=java_bytecode_promotion(element);
13631349
}
13641350
else if(statement==patternt("?load"))
@@ -1899,17 +1885,15 @@ codet java_bytecode_convert_methodt::convert_instructions(
18991885
java_new_array.add_source_location()=i_it->source_location;
19001886

19011887
c=code_blockt();
1902-
if(!disable_runtime_checks)
1903-
{
1904-
// TODO make this throw NegativeArrayIndexException instead.
1905-
constant_exprt intzero=from_integer(0, java_int_type());
1906-
binary_relation_exprt gezero(op[0], ID_ge, intzero);
1907-
code_assertt check(gezero);
1908-
check.add_source_location().set_comment("Array size < 0");
1909-
check.add_source_location()
1910-
.set_property_class("array-create-negative-size");
1911-
c.move_to_operands(check);
1912-
}
1888+
// TODO make this throw NegativeArrayIndexException instead.
1889+
constant_exprt intzero=from_integer(0, java_int_type());
1890+
binary_relation_exprt gezero(op[0], ID_ge, intzero);
1891+
code_assertt check(gezero);
1892+
check.add_source_location().set_comment("Array size < 0");
1893+
check.add_source_location()
1894+
.set_property_class("array-create-negative-size");
1895+
c.move_to_operands(check);
1896+
19131897
if(max_array_length!=0)
19141898
{
19151899
constant_exprt size_limit=
@@ -1941,26 +1925,24 @@ codet java_bytecode_convert_methodt::convert_instructions(
19411925
java_new_array.add_source_location()=i_it->source_location;
19421926

19431927
code_blockt checkandcreate;
1944-
if(!disable_runtime_checks)
1928+
// TODO make this throw NegativeArrayIndexException instead.
1929+
constant_exprt intzero=from_integer(0, java_int_type());
1930+
binary_relation_exprt gezero(op[0], ID_ge, intzero);
1931+
code_assertt check(gezero);
1932+
check.add_source_location().set_comment("Array size < 0");
1933+
check.add_source_location()
1934+
.set_property_class("array-create-negative-size");
1935+
checkandcreate.move_to_operands(check);
1936+
1937+
if(max_array_length!=0)
19451938
{
1946-
// TODO make this throw NegativeArrayIndexException instead.
1947-
constant_exprt intzero=from_integer(0, java_int_type());
1948-
binary_relation_exprt gezero(op[0], ID_ge, intzero);
1949-
code_assertt check(gezero);
1950-
check.add_source_location().set_comment("Array size < 0");
1951-
check.add_source_location()
1952-
.set_property_class("array-create-negative-size");
1953-
checkandcreate.move_to_operands(check);
1954-
1955-
if(max_array_length!=0)
1956-
{
1957-
constant_exprt size_limit=
1958-
from_integer(max_array_length, java_int_type());
1959-
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
1960-
code_assumet assume_le_max_size(le_max_size);
1961-
checkandcreate.move_to_operands(assume_le_max_size);
1962-
}
1939+
constant_exprt size_limit=
1940+
from_integer(max_array_length, java_int_type());
1941+
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
1942+
code_assumet assume_le_max_size(le_max_size);
1943+
checkandcreate.move_to_operands(assume_le_max_size);
19631944
}
1945+
19641946
const exprt tmp=tmp_variable("newarray", ref_type);
19651947
c=code_assignt(tmp, java_new_array);
19661948
results[0]=tmp;
@@ -2430,15 +2412,13 @@ void java_bytecode_convert_method(
24302412
const java_bytecode_parse_treet::methodt &method,
24312413
symbol_tablet &symbol_table,
24322414
message_handlert &message_handler,
2433-
bool disable_runtime_checks,
24342415
size_t max_array_length,
24352416
safe_pointer<std::vector<irep_idt> > needed_methods,
24362417
safe_pointer<std::set<irep_idt> > needed_classes)
24372418
{
24382419
java_bytecode_convert_methodt java_bytecode_convert_method(
24392420
symbol_table,
24402421
message_handler,
2441-
disable_runtime_checks,
24422422
max_array_length,
24432423
needed_methods,
24442424
needed_classes);

src/java_bytecode/java_bytecode_convert_method.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ void java_bytecode_convert_method(
2222
const java_bytecode_parse_treet::methodt &,
2323
symbol_tablet &symbol_table,
2424
message_handlert &message_handler,
25-
bool disable_runtime_checks,
2625
size_t max_array_length,
2726
safe_pointer<std::vector<irep_idt> > needed_methods,
2827
safe_pointer<std::set<irep_idt> > needed_classes);
@@ -33,15 +32,13 @@ inline void java_bytecode_convert_method(
3332
const java_bytecode_parse_treet::methodt &method,
3433
symbol_tablet &symbol_table,
3534
message_handlert &message_handler,
36-
bool disable_runtime_checks,
3735
size_t max_array_length)
3836
{
3937
java_bytecode_convert_method(
4038
class_symbol,
4139
method,
4240
symbol_table,
4341
message_handler,
44-
disable_runtime_checks,
4542
max_array_length,
4643
safe_pointer<std::vector<irep_idt> >::create_null(),
4744
safe_pointer<std::set<irep_idt> >::create_null());

src/java_bytecode/java_bytecode_convert_method_class.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,11 @@ class java_bytecode_convert_methodt:public messaget
3030
java_bytecode_convert_methodt(
3131
symbol_tablet &_symbol_table,
3232
message_handlert &_message_handler,
33-
bool _disable_runtime_checks,
3433
size_t _max_array_length,
3534
safe_pointer<std::vector<irep_idt> > _needed_methods,
3635
safe_pointer<std::set<irep_idt> > _needed_classes):
3736
messaget(_message_handler),
3837
symbol_table(_symbol_table),
39-
disable_runtime_checks(_disable_runtime_checks),
4038
max_array_length(_max_array_length),
4139
needed_methods(_needed_methods),
4240
needed_classes(_needed_classes)
@@ -56,7 +54,6 @@ class java_bytecode_convert_methodt:public messaget
5654

5755
protected:
5856
symbol_tablet &symbol_table;
59-
const bool disable_runtime_checks;
6057
const size_t max_array_length;
6158
safe_pointer<std::vector<irep_idt> > needed_methods;
6259
safe_pointer<std::set<irep_idt> > needed_classes;

src/java_bytecode/java_bytecode_language.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ Function: java_bytecode_languaget::get_language_options
4242

4343
void java_bytecode_languaget::get_language_options(const cmdlinet &cmd)
4444
{
45-
disable_runtime_checks=cmd.isset("disable-runtime-check");
4645
assume_inputs_non_null=cmd.isset("java-assume-inputs-non-null");
4746
string_refinement_enabled=cmd.isset("string-refine");
4847
if(cmd.isset("java-max-input-array-length"))
@@ -525,7 +524,6 @@ bool java_bytecode_languaget::typecheck(
525524
c_it->second,
526525
symbol_table,
527526
get_message_handler(),
528-
disable_runtime_checks,
529527
max_user_array_length,
530528
lazy_methods,
531529
lazy_methods_mode,
@@ -646,7 +644,6 @@ bool java_bytecode_languaget::do_ci_lazy_method_conversion(
646644
*parsed_method.second,
647645
symbol_table,
648646
get_message_handler(),
649-
disable_runtime_checks,
650647
max_user_array_length,
651648
safe_pointer<std::vector<irep_idt> >::create_non_null(
652649
&method_worklist2),
@@ -761,7 +758,6 @@ void java_bytecode_languaget::convert_lazy_method(
761758
*lazy_method_entry.second,
762759
symtab,
763760
get_message_handler(),
764-
disable_runtime_checks,
765761
max_user_array_length);
766762
}
767763

src/java_bytecode/java_bytecode_language.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,6 @@ class java_bytecode_languaget:public languaget
9494
std::vector<irep_idt> main_jar_classes;
9595
java_class_loadert java_class_loader;
9696
bool assume_inputs_non_null; // assume inputs variables to be non-null
97-
98-
bool disable_runtime_checks; // disable run-time checks for java, i.e.,
99-
// ASSERTS for
100-
// - checkcast / instanceof
101-
// - array bounds check
102-
// - array size for newarray
10397
size_t max_nondet_array_length; // maximal length for non-det array creation
10498
size_t max_user_array_length; // max size for user code created arrays
10599
lazy_methodst lazy_methods;

0 commit comments

Comments
 (0)