@@ -773,20 +773,20 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
773
773
bool allow_merge)
774
774
{
775
775
// Check the tree shape invariant:
776
- assert (tree.branch .size ()== tree.branch_addresses .size ());
776
+ PRECONDITION (tree.branch .size () == tree.branch_addresses .size ());
777
777
778
778
// If there are no child blocks, return this.
779
779
if (tree.leaf )
780
780
return this_block;
781
- assert (!tree.branch .empty ());
781
+ PRECONDITION (!tree.branch .empty ());
782
782
783
783
// Find child block starting > address_start:
784
784
const auto afterstart=
785
785
std::upper_bound (
786
786
tree.branch_addresses .begin (),
787
787
tree.branch_addresses .end (),
788
788
address_start);
789
- assert (afterstart!= tree.branch_addresses .begin ());
789
+ CHECK_RETURN (afterstart != tree.branch_addresses .begin ());
790
790
auto findstart=afterstart;
791
791
--findstart;
792
792
auto child_offset=
@@ -814,9 +814,9 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
814
814
while (child_iter != this_block.statements ().end () &&
815
815
child_iter->get_statement () == ID_decl)
816
816
++child_iter;
817
- assert (child_iter != this_block.statements ().end ());
817
+ CHECK_RETURN (child_iter != this_block.statements ().end ());
818
818
std::advance (child_iter, child_offset);
819
- assert (child_iter != this_block.statements ().end ());
819
+ CHECK_RETURN (child_iter != this_block.statements ().end ());
820
820
auto &child_label=to_code_label (*child_iter);
821
821
auto &child_block=to_code_block (child_label.code ());
822
822
@@ -848,7 +848,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
848
848
// Check for incoming control-flow edges targeting non-header
849
849
// blocks of the new proposed block range:
850
850
auto checkit=amap.find (*findstart);
851
- assert (checkit!= amap.end ());
851
+ CHECK_RETURN (checkit != amap.end ());
852
852
++checkit; // Skip the header, which can have incoming edges from outside.
853
853
for (;
854
854
checkit!=amap.end () && (checkit->first )<(findlim_block_start_address);
@@ -880,15 +880,15 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
880
880
code_labelt newlabel (child_label_name, code_blockt ());
881
881
code_blockt &newblock=to_code_block (newlabel.code ());
882
882
auto nblocks=std::distance (findstart, findlim);
883
- assert (nblocks>= 2 );
883
+ CHECK_RETURN (nblocks >= 2 );
884
884
log .debug () << " Generating codet: combining "
885
885
<< std::distance (findstart, findlim) << " blocks for addresses "
886
886
<< (*findstart) << " -" << findlim_block_start_address
887
887
<< messaget::eom;
888
888
889
889
// Make a new block containing every child of interest:
890
890
auto &this_block_children = this_block.statements ();
891
- assert (tree.branch .size ()== this_block_children.size ());
891
+ CHECK_RETURN (tree.branch .size () == this_block_children.size ());
892
892
for (auto blockidx=child_offset, blocklim=child_offset+nblocks;
893
893
blockidx!=blocklim;
894
894
++blockidx)
@@ -918,7 +918,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
918
918
++branchstart;
919
919
tree.branch .erase (branchstart, branchlim);
920
920
921
- assert (tree.branch .size ()== this_block_children.size ());
921
+ CHECK_RETURN (tree.branch .size () == this_block_children.size ());
922
922
923
923
auto branchaddriter=tree.branch_addresses .begin ();
924
924
std::advance (branchaddriter, child_offset);
@@ -934,7 +934,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
934
934
935
935
tree.branch [child_offset]=std::move (newnode);
936
936
937
- assert (tree.branch .size ()== tree.branch_addresses .size ());
937
+ CHECK_RETURN (tree.branch .size () == tree.branch_addresses .size ());
938
938
939
939
return
940
940
to_code_block (
@@ -1074,10 +1074,10 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1074
1074
converted_instructiont ins=converted_instructiont (i_it, code_skipt ());
1075
1075
std::pair<address_mapt::iterator, bool > a_entry=
1076
1076
address_map.insert (std::make_pair (i_it->address , ins));
1077
- assert (a_entry.second );
1077
+ CHECK_RETURN (a_entry.second );
1078
1078
// addresses are strictly increasing, hence we must have inserted
1079
1079
// a new maximal key
1080
- assert (a_entry.first == --address_map.end ());
1080
+ CHECK_RETURN (a_entry.first == --address_map.end ());
1081
1081
1082
1082
const auto bytecode = i_it->bytecode ;
1083
1083
const std::string statement = bytecode_info[i_it->bytecode ].mnemonic ;
@@ -1217,9 +1217,10 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1217
1217
instruction.stack .clear ();
1218
1218
codet &c = instruction.code ;
1219
1219
1220
- assert (
1220
+ INVARIANT (
1221
1221
stack.empty () || instruction.predecessors .size () <= 1 ||
1222
- has_prefix (stack.front ().get_string (ID_C_base_name), " $stack" ));
1222
+ has_prefix (stack.front ().get_string (ID_C_base_name), " $stack" ),
1223
+ " inconsistent stack" );
1223
1224
1224
1225
exprt arg0=i_it->args .size ()>=1 ?i_it->args [0 ]:nil_exprt ();
1225
1226
exprt arg1=i_it->args .size ()>=2 ?i_it->args [1 ]:nil_exprt ();
@@ -1288,7 +1289,7 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1288
1289
1289
1290
if (bytecode == BC_aconst_null)
1290
1291
{
1291
- assert (results.size ()== 1 );
1292
+ PRECONDITION (results.size () == 1 );
1292
1293
results[0 ] = null_pointer_exprt (java_reference_type (java_void_type ()));
1293
1294
}
1294
1295
else if (bytecode == BC_athrow)
@@ -1428,23 +1429,23 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1428
1429
// and write something like:
1429
1430
// if(retaddr==5) goto 5; else if(retaddr==10) goto 10; ...
1430
1431
PRECONDITION (op.empty () && results.empty ());
1431
- assert (!jsr_ret_targets.empty ());
1432
+ PRECONDITION (!jsr_ret_targets.empty ());
1432
1433
c = convert_ret (
1433
1434
jsr_ret_targets, arg0, i_it->source_location , i_it->address );
1434
1435
}
1435
1436
else if (bytecode == BC_iconst_m1)
1436
1437
{
1437
- assert (results.size ()== 1 );
1438
+ CHECK_RETURN (results.size () == 1 );
1438
1439
results[0 ]=from_integer (-1 , java_int_type ());
1439
1440
}
1440
1441
else if (bytecode == patternt (" ?const_?" ))
1441
1442
{
1442
- assert (results.size ()== 1 );
1443
+ CHECK_RETURN (results.size () == 1 );
1443
1444
results = convert_const (statement, to_constant_expr (arg0), results);
1444
1445
}
1445
1446
else if (bytecode == patternt (" ?ipush" ))
1446
1447
{
1447
- PRECONDITION (results.size ()== 1 );
1448
+ CHECK_RETURN (results.size () == 1 );
1448
1449
DATA_INVARIANT (
1449
1450
arg0.id ()==ID_constant,
1450
1451
" ipush argument expected to be constant" );
@@ -1737,7 +1738,7 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1737
1738
numeric_cast_v<std::size_t >(to_constant_expr (arg1));
1738
1739
1739
1740
op=pop (dimension);
1740
- assert (results.size ()== 1 );
1741
+ CHECK_RETURN (results.size () == 1 );
1741
1742
c = convert_multianewarray (i_it->source_location , arg0, op, results);
1742
1743
}
1743
1744
else if (bytecode == BC_arraylength)
@@ -1848,7 +1849,9 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1848
1849
stackt::const_iterator os_it=a_it2->second .stack .begin ();
1849
1850
for (auto &expr : stack)
1850
1851
{
1851
- assert (has_prefix (os_it->get_string (ID_C_base_name), " $stack" ));
1852
+ INVARIANT (
1853
+ has_prefix (os_it->get_string (ID_C_base_name), " $stack" ),
1854
+ " invalid base name" );
1852
1855
symbol_exprt lhs=to_symbol_expr (*os_it);
1853
1856
code_assignt a (lhs, expr);
1854
1857
more_code.add (a);
@@ -1917,7 +1920,7 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1917
1920
for (const auto &address_pair : address_map)
1918
1921
{
1919
1922
const method_offsett address = address_pair.first ;
1920
- assert (address_pair.first == address_pair.second .source ->address );
1923
+ CHECK_RETURN (address_pair.first == address_pair.second .source ->address );
1921
1924
const codet &c=address_pair.second .code ;
1922
1925
1923
1926
// Start a new lexical block if this is a branch target:
@@ -1946,9 +1949,10 @@ java_bytecode_convert_methodt::convert_instructions(const methodt &method)
1946
1949
root_block.add (
1947
1950
code_labelt{label (std::to_string (address)), code_blockt{}});
1948
1951
root.branch .push_back (block_tree_nodet::get_leaf ());
1949
- assert ((root.branch_addresses .empty () ||
1950
- root.branch_addresses .back ()<address) &&
1951
- " Block addresses should be unique and increasing" );
1952
+ INVARIANT (
1953
+ (root.branch_addresses .empty () ||
1954
+ root.branch_addresses .back () < address),
1955
+ " Block addresses should be unique and increasing" );
1952
1956
root.branch_addresses .push_back (address);
1953
1957
}
1954
1958
0 commit comments