@@ -780,20 +780,20 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
780
780
bool allow_merge)
781
781
{
782
782
// Check the tree shape invariant:
783
- assert (tree.branch .size ()== tree.branch_addresses .size ());
783
+ PRECONDITION (tree.branch .size () == tree.branch_addresses .size ());
784
784
785
785
// If there are no child blocks, return this.
786
786
if (tree.leaf )
787
787
return this_block;
788
- assert (!tree.branch .empty ());
788
+ PRECONDITION (!tree.branch .empty ());
789
789
790
790
// Find child block starting > address_start:
791
791
const auto afterstart=
792
792
std::upper_bound (
793
793
tree.branch_addresses .begin (),
794
794
tree.branch_addresses .end (),
795
795
address_start);
796
- assert (afterstart!= tree.branch_addresses .begin ());
796
+ CHECK_RETURN (afterstart != tree.branch_addresses .begin ());
797
797
auto findstart=afterstart;
798
798
--findstart;
799
799
auto child_offset=
@@ -821,9 +821,9 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
821
821
while (child_iter != this_block.statements ().end () &&
822
822
child_iter->get_statement () == ID_decl)
823
823
++child_iter;
824
- assert (child_iter != this_block.statements ().end ());
824
+ CHECK_RETURN (child_iter != this_block.statements ().end ());
825
825
std::advance (child_iter, child_offset);
826
- assert (child_iter != this_block.statements ().end ());
826
+ CHECK_RETURN (child_iter != this_block.statements ().end ());
827
827
auto &child_label=to_code_label (*child_iter);
828
828
auto &child_block=to_code_block (child_label.code ());
829
829
@@ -855,7 +855,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
855
855
// Check for incoming control-flow edges targeting non-header
856
856
// blocks of the new proposed block range:
857
857
auto checkit=amap.find (*findstart);
858
- assert (checkit!= amap.end ());
858
+ CHECK_RETURN (checkit != amap.end ());
859
859
++checkit; // Skip the header, which can have incoming edges from outside.
860
860
for (;
861
861
checkit!=amap.end () && (checkit->first )<(findlim_block_start_address);
@@ -887,15 +887,15 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
887
887
code_labelt newlabel (child_label_name, code_blockt ());
888
888
code_blockt &newblock=to_code_block (newlabel.code ());
889
889
auto nblocks=std::distance (findstart, findlim);
890
- assert (nblocks>= 2 );
890
+ CHECK_RETURN (nblocks >= 2 );
891
891
log .debug () << " Generating codet: combining "
892
892
<< std::distance (findstart, findlim) << " blocks for addresses "
893
893
<< (*findstart) << " -" << findlim_block_start_address
894
894
<< messaget::eom;
895
895
896
896
// Make a new block containing every child of interest:
897
897
auto &this_block_children = this_block.statements ();
898
- assert (tree.branch .size ()== this_block_children.size ());
898
+ CHECK_RETURN (tree.branch .size () == this_block_children.size ());
899
899
for (auto blockidx=child_offset, blocklim=child_offset+nblocks;
900
900
blockidx!=blocklim;
901
901
++blockidx)
@@ -925,7 +925,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
925
925
++branchstart;
926
926
tree.branch .erase (branchstart, branchlim);
927
927
928
- assert (tree.branch .size ()== this_block_children.size ());
928
+ CHECK_RETURN (tree.branch .size () == this_block_children.size ());
929
929
930
930
auto branchaddriter=tree.branch_addresses .begin ();
931
931
std::advance (branchaddriter, child_offset);
@@ -941,7 +941,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
941
941
942
942
tree.branch [child_offset]=std::move (newnode);
943
943
944
- assert (tree.branch .size ()== tree.branch_addresses .size ());
944
+ CHECK_RETURN (tree.branch .size () == tree.branch_addresses .size ());
945
945
946
946
return
947
947
to_code_block (
@@ -1081,10 +1081,10 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1081
1081
converted_instructiont ins=converted_instructiont (i_it, code_skipt ());
1082
1082
std::pair<address_mapt::iterator, bool > a_entry=
1083
1083
address_map.insert (std::make_pair (i_it->address , ins));
1084
- assert (a_entry.second );
1084
+ CHECK_RETURN (a_entry.second );
1085
1085
// addresses are strictly increasing, hence we must have inserted
1086
1086
// a new maximal key
1087
- assert (a_entry.first == --address_map.end ());
1087
+ CHECK_RETURN (a_entry.first == --address_map.end ());
1088
1088
1089
1089
const auto bytecode = i_it->bytecode ;
1090
1090
const std::string statement = bytecode_info[i_it->bytecode ].mnemonic ;
@@ -1224,9 +1224,10 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1224
1224
instruction.stack .clear ();
1225
1225
codet &c = instruction.code ;
1226
1226
1227
- assert (
1227
+ INVARIANT (
1228
1228
stack.empty () || instruction.predecessors .size () <= 1 ||
1229
- has_prefix (stack.front ().get_string (ID_C_base_name), " $stack" ));
1229
+ has_prefix (stack.front ().get_string (ID_C_base_name), " $stack" ),
1230
+ " inconsistent stack" );
1230
1231
1231
1232
exprt arg0=i_it->args .size ()>=1 ?i_it->args [0 ]:nil_exprt ();
1232
1233
exprt arg1=i_it->args .size ()>=2 ?i_it->args [1 ]:nil_exprt ();
@@ -1295,7 +1296,7 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1295
1296
1296
1297
if (bytecode == BC_aconst_null)
1297
1298
{
1298
- assert (results.size ()== 1 );
1299
+ PRECONDITION (results.size () == 1 );
1299
1300
results[0 ] = null_pointer_exprt (java_reference_type (java_void_type ()));
1300
1301
}
1301
1302
else if (bytecode == BC_athrow)
@@ -1435,23 +1436,23 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1435
1436
// and write something like:
1436
1437
// if(retaddr==5) goto 5; else if(retaddr==10) goto 10; ...
1437
1438
PRECONDITION (op.empty () && results.empty ());
1438
- assert (!jsr_ret_targets.empty ());
1439
+ PRECONDITION (!jsr_ret_targets.empty ());
1439
1440
c = convert_ret (
1440
1441
jsr_ret_targets, arg0, i_it->source_location , i_it->address );
1441
1442
}
1442
1443
else if (bytecode == BC_iconst_m1)
1443
1444
{
1444
- assert (results.size ()== 1 );
1445
+ CHECK_RETURN (results.size () == 1 );
1445
1446
results[0 ]=from_integer (-1 , java_int_type ());
1446
1447
}
1447
1448
else if (bytecode == patternt (" ?const_?" ))
1448
1449
{
1449
- assert (results.size ()== 1 );
1450
+ CHECK_RETURN (results.size () == 1 );
1450
1451
results = convert_const (statement, to_constant_expr (arg0), results);
1451
1452
}
1452
1453
else if (bytecode == patternt (" ?ipush" ))
1453
1454
{
1454
- PRECONDITION (results.size ()== 1 );
1455
+ CHECK_RETURN (results.size () == 1 );
1455
1456
DATA_INVARIANT (
1456
1457
arg0.id ()==ID_constant,
1457
1458
" ipush argument expected to be constant" );
@@ -1744,7 +1745,7 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1744
1745
numeric_cast_v<std::size_t >(to_constant_expr (arg1));
1745
1746
1746
1747
op=pop (dimension);
1747
- assert (results.size ()== 1 );
1748
+ CHECK_RETURN (results.size () == 1 );
1748
1749
c = convert_multianewarray (i_it->source_location , arg0, op, results);
1749
1750
}
1750
1751
else if (bytecode == BC_arraylength)
@@ -1855,7 +1856,9 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1855
1856
stackt::const_iterator os_it=a_it2->second .stack .begin ();
1856
1857
for (auto &expr : stack)
1857
1858
{
1858
- assert (has_prefix (os_it->get_string (ID_C_base_name), " $stack" ));
1859
+ INVARIANT (
1860
+ has_prefix (os_it->get_string (ID_C_base_name), " $stack" ),
1861
+ " invalid base name" );
1859
1862
symbol_exprt lhs=to_symbol_expr (*os_it);
1860
1863
code_assignt a (lhs, expr);
1861
1864
more_code.add (a);
@@ -1928,7 +1931,7 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1928
1931
for (const auto &address_pair : address_map)
1929
1932
{
1930
1933
const method_offsett address = address_pair.first ;
1931
- assert (address_pair.first == address_pair.second .source ->address );
1934
+ CHECK_RETURN (address_pair.first == address_pair.second .source ->address );
1932
1935
const codet &c=address_pair.second .code ;
1933
1936
1934
1937
// Start a new lexical block if this is a branch target:
@@ -1957,9 +1960,10 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1957
1960
root_block.add (
1958
1961
code_labelt{label (std::to_string (address)), code_blockt{}});
1959
1962
root.branch .push_back (block_tree_nodet::get_leaf ());
1960
- assert ((root.branch_addresses .empty () ||
1961
- root.branch_addresses .back ()<address) &&
1962
- " Block addresses should be unique and increasing" );
1963
+ INVARIANT (
1964
+ (root.branch_addresses .empty () ||
1965
+ root.branch_addresses .back () < address),
1966
+ " Block addresses should be unique and increasing" );
1963
1967
root.branch_addresses .push_back (address);
1964
1968
}
1965
1969
0 commit comments