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