Skip to content

Commit 8ecbec9

Browse files
author
Daniel Kroening
authored
Merge pull request #3067 from diffblue/code_block_move_add_partial
use code_blockt::add and ::move for adding a statement
2 parents f0ec760 + 46232f0 commit 8ecbec9

23 files changed

+229
-249
lines changed

jbmc/src/java_bytecode/java_bytecode_concurrency_instrumentation.cpp

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,7 @@ static void monitor_exits(codet &code, const codet &monitorexit)
135135
if(statement == ID_return)
136136
{
137137
// Replace the return with a monitor exit plus return block
138-
code_blockt return_block;
139-
return_block.add(monitorexit);
140-
return_block.move_to_operands(code);
141-
code = return_block;
138+
code = code_blockt({monitorexit, code});
142139
}
143140
else if(
144141
statement == ID_label || statement == ID_block ||
@@ -257,13 +254,7 @@ static void instrument_synchronized_code(
257254
monitor_exits(code, monitorexit);
258255

259256
// Wrap the code into a try finally
260-
code_blockt try_block;
261-
try_block.move_to_operands(monitorenter);
262-
try_block.move_to_operands(catch_push);
263-
try_block.move_to_operands(code);
264-
try_block.move_to_operands(catch_pop);
265-
try_block.move_to_operands(catch_label);
266-
code = try_block;
257+
code = code_blockt({monitorenter, catch_push, code, catch_pop, catch_label});
267258
}
268259

269260
/// Transforms the codet stored in in \p f_code, which is a call to function
@@ -326,17 +317,14 @@ static void instrument_start_thread(
326317
const code_assignt tmp_d(next_symbol_expr, plus);
327318
const code_assignt tmp_e(current_symbol.symbol_expr(), next_symbol_expr);
328319

329-
code_blockt block;
330-
block.add(tmp_a);
331-
block.add(tmp_b);
332-
block.add(tmp_c);
333-
block.add(codet(ID_atomic_begin));
334-
block.add(tmp_d);
335-
block.add(tmp_e);
336-
block.add(codet(ID_atomic_end));
337-
block.add_source_location() = f_code.source_location();
338-
339-
code = block;
320+
code = code_blockt({tmp_a,
321+
tmp_b,
322+
tmp_c,
323+
codet(ID_atomic_begin),
324+
tmp_d,
325+
tmp_e,
326+
codet(ID_atomic_end)});
327+
code.add_source_location() = f_code.source_location();
340328
}
341329

342330
/// Transforms the codet stored in in \p f_code, which is a call to function
@@ -367,12 +355,9 @@ static void instrument_end_thread(
367355
codet tmp_a(ID_end_thread);
368356
const code_labelt tmp_b(lbl2, code_skipt());
369357

370-
code_blockt block;
371-
block.add(tmp_a);
372-
block.add(tmp_b);
373-
block.add_source_location() = code.source_location();
374-
375-
code = block;
358+
const auto location = code.source_location();
359+
code = code_blockt({tmp_a, tmp_b});
360+
code.add_source_location() = location;
376361
}
377362

378363
/// Transforms the codet stored in in \p f_code, which is a call to function

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -853,10 +853,7 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
853853
symbol_table.add(local_symbol);
854854
const auto &local_symexpr=local_symbol.symbol_expr();
855855

856-
code_blockt clone_body;
857-
858856
code_declt declare_cloned(local_symexpr);
859-
clone_body.move_to_operands(declare_cloned);
860857

861858
source_locationt location;
862859
location.set_function(local_name);
@@ -868,7 +865,6 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
868865
old_array, length_component.get_name(), length_component.type());
869866
java_new_array.copy_to_operands(old_length);
870867
code_assignt create_blank(local_symexpr, java_new_array);
871-
clone_body.move_to_operands(create_blank);
872868

873869
member_exprt old_data(
874870
old_array, data_component.get_name(), data_component.type());
@@ -898,7 +894,6 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
898894
const auto &index_symexpr=index_symbol.symbol_expr();
899895

900896
code_declt declare_index(index_symexpr);
901-
clone_body.move_to_operands(declare_index);
902897

903898
code_fort copy_loop;
904899

@@ -920,14 +915,13 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
920915
code_assignt copy_cell(new_cell, old_cell);
921916
copy_loop.body()=copy_cell;
922917

923-
// End for-loop
924-
clone_body.move_to_operands(copy_loop);
925-
926918
member_exprt new_base_class(
927919
new_array, base_class_component.get_name(), base_class_component.type());
928920
address_of_exprt retval(new_base_class);
929921
code_returnt return_inst(retval);
930-
clone_body.move_to_operands(return_inst);
922+
923+
const code_blockt clone_body(
924+
{declare_cloned, create_blank, declare_index, copy_loop, return_inst});
931925

932926
symbolt clone_symbol;
933927
clone_symbol.name=clone_name;

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 25 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
873873
for(auto blockidx=child_offset, blocklim=child_offset+nblocks;
874874
blockidx!=blocklim;
875875
++blockidx)
876-
newblock.move_to_operands(this_block_children[blockidx]);
876+
newblock.add(this_block_children[blockidx]);
877877

878878
// Relabel the inner header:
879879
to_code_label(newblock.statements()[0]).set_label(new_label_irep);
@@ -1727,7 +1727,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
17271727
{
17281728
symbol_exprt lhs=tmp_variable("$stack", s_it->type());
17291729
code_assignt a(lhs, *s_it);
1730-
more_code.copy_to_operands(a);
1730+
more_code.add(a);
17311731

17321732
s_it->swap(lhs);
17331733
}
@@ -1743,7 +1743,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
17431743
assert(has_prefix(os_it->get_string(ID_C_base_name), "$stack"));
17441744
symbol_exprt lhs=to_symbol_expr(*os_it);
17451745
code_assignt a(lhs, expr);
1746-
more_code.copy_to_operands(a);
1746+
more_code.add(a);
17471747

17481748
expr.swap(lhs);
17491749
++os_it;
@@ -1752,7 +1752,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
17521752

17531753
if(results.empty())
17541754
{
1755-
more_code.copy_to_operands(c);
1755+
more_code.add(c);
17561756
c.swap(more_code);
17571757
}
17581758
else
@@ -1834,7 +1834,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
18341834
if(start_new_block)
18351835
{
18361836
code_labelt newlabel(label(std::to_string(address)), code_blockt());
1837-
root_block.move_to_operands(newlabel);
1837+
root_block.add(newlabel);
18381838
root.branch.push_back(block_tree_nodet::get_leaf());
18391839
assert((root.branch_addresses.empty() ||
18401840
root.branch_addresses.back()<address) &&
@@ -1912,7 +1912,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
19121912
}
19131913

19141914
for(auto &block : root_block.statements())
1915-
code.move_to_operands(block);
1915+
code.add(block);
19161916

19171917
return code;
19181918
}
@@ -2252,12 +2252,7 @@ void java_bytecode_convert_methodt::convert_invoke(
22522252
{
22532253
codet clinit_call = get_clinit_call(arg0.get(ID_C_class));
22542254
if(clinit_call.get_statement() != ID_skip)
2255-
{
2256-
code_blockt ret_block;
2257-
ret_block.move_to_operands(clinit_call);
2258-
ret_block.move_to_operands(c);
2259-
c = std::move(ret_block);
2260-
}
2255+
c = code_blockt({clinit_call, c});
22612256
}
22622257
}
22632258

@@ -2320,10 +2315,7 @@ void java_bytecode_convert_methodt::convert_athrow(
23202315
assume_location.set("user-provided", true);
23212316
assume_code.add_source_location() = assume_location;
23222317

2323-
code_blockt ret_block;
2324-
ret_block.move_to_operands(assert_code);
2325-
ret_block.move_to_operands(assume_code);
2326-
c = ret_block;
2318+
c = code_blockt({assert_code, assume_code});
23272319
}
23282320
else
23292321
{
@@ -2394,10 +2386,7 @@ codet &java_bytecode_convert_methodt::do_exception_handling(
23942386
exception_ids[i], handler_labels[i]));
23952387
}
23962388

2397-
code_blockt try_block;
2398-
try_block.move_to_operands(catch_push);
2399-
try_block.move_to_operands(c);
2400-
c = try_block;
2389+
c = code_blockt({catch_push, c});
24012390
}
24022391
else
24032392
{
@@ -2435,10 +2424,7 @@ codet &java_bytecode_convert_methodt::do_exception_handling(
24352424
start_pc = exception_row.start_pc;
24362425
// add CATCH_POP instruction
24372426
code_pop_catcht catch_pop;
2438-
code_blockt end_try_block;
2439-
end_try_block.move_to_operands(c);
2440-
end_try_block.move_to_operands(catch_pop);
2441-
c = end_try_block;
2427+
c = code_blockt({c, catch_pop});
24422428
}
24432429
}
24442430
}
@@ -2464,11 +2450,11 @@ void java_bytecode_convert_methodt::convert_multianewarray(
24642450
constant_exprt size_limit = from_integer(max_array_length, java_int_type());
24652451
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
24662452
code_assumet assume_le_max_size(le_max_size);
2467-
create.move_to_operands(assume_le_max_size);
2453+
create.add(assume_le_max_size);
24682454
}
24692455

24702456
const exprt tmp = tmp_variable("newarray", ref_type);
2471-
create.copy_to_operands(code_assignt(tmp, java_new_array));
2457+
create.add(code_assignt(tmp, java_new_array));
24722458
c = std::move(create);
24732459
results[0] = tmp;
24742460
}
@@ -2521,10 +2507,10 @@ void java_bytecode_convert_methodt::convert_newarray(
25212507
constant_exprt size_limit = from_integer(max_array_length, java_int_type());
25222508
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
25232509
code_assumet assume_le_max_size(le_max_size);
2524-
c.move_to_operands(assume_le_max_size);
2510+
to_code_block(c).add(assume_le_max_size);
25252511
}
25262512
const exprt tmp = tmp_variable("newarray", ref_type);
2527-
c.copy_to_operands(code_assignt(tmp, java_new_array));
2513+
to_code_block(c).add(code_assignt(tmp, java_new_array));
25282514
results[0] = tmp;
25292515
}
25302516

@@ -2547,10 +2533,7 @@ void java_bytecode_convert_methodt::convert_new(
25472533
get_clinit_call(to_symbol_type(arg0.type()).get_identifier());
25482534
if(clinit_call.get_statement() != ID_skip)
25492535
{
2550-
code_blockt ret_block;
2551-
ret_block.move_to_operands(clinit_call);
2552-
ret_block.move_to_operands(c);
2553-
c = std::move(ret_block);
2536+
c = code_blockt({clinit_call, c});
25542537
}
25552538
results[0] = tmp;
25562539
}
@@ -2575,15 +2558,15 @@ codet java_bytecode_convert_methodt::convert_putstatic(
25752558
// the field.
25762559
codet clinit_call = get_clinit_call(arg0.get_string(ID_class));
25772560
if(clinit_call.get_statement() != ID_skip)
2578-
block.move_to_operands(clinit_call);
2561+
block.add(clinit_call);
25792562

25802563
save_stack_entries(
25812564
"stack_static_field",
25822565
symbol_expr.type(),
25832566
block,
25842567
bytecode_write_typet::STATIC_FIELD,
25852568
symbol_expr.get_identifier());
2586-
block.copy_to_operands(code_assignt(symbol_expr, op[0]));
2569+
block.add(code_assignt(symbol_expr, op[0]));
25872570
return block;
25882571
}
25892572

@@ -2598,7 +2581,7 @@ codet java_bytecode_convert_methodt::convert_putfield(
25982581
block,
25992582
bytecode_write_typet::FIELD,
26002583
arg0.get(ID_component_name));
2601-
block.copy_to_operands(code_assignt(to_member(op[0], arg0), op[1]));
2584+
block.add(code_assignt(to_member(op[0], arg0), op[1]));
26022585
return block;
26032586
}
26042587

@@ -2738,7 +2721,8 @@ codet java_bytecode_convert_methodt::convert_iinc(
27382721
const code_assignt code_assign(
27392722
variable(arg0, 'i', address, NO_CAST),
27402723
plus_exprt(variable(arg0, 'i', address, CAST_AS_NEEDED), arg1_int_type));
2741-
block.copy_to_operands(code_assign);
2724+
block.add(code_assign);
2725+
27422726
return block;
27432727
}
27442728

@@ -2843,7 +2827,7 @@ code_blockt java_bytecode_convert_methodt::convert_ret(
28432827
code_gotot g(label(number));
28442828
g.add_source_location() = location;
28452829
if(idx == idxlim - 1)
2846-
c.move_to_operands(g);
2830+
c.add(g);
28472831
else
28482832
{
28492833
code_ifthenelset branch;
@@ -2854,7 +2838,7 @@ code_blockt java_bytecode_convert_methodt::convert_ret(
28542838
branch.cond().add_source_location() = location;
28552839
branch.then_case() = g;
28562840
branch.add_source_location() = location;
2857-
c.move_to_operands(branch);
2841+
c.add(branch);
28582842
}
28592843
}
28602844
return c;
@@ -2905,7 +2889,7 @@ codet java_bytecode_convert_methodt::convert_store(
29052889
var_name);
29062890
code_assignt assign(var, toassign);
29072891
assign.add_source_location() = location;
2908-
block.move(assign);
2892+
block.add(assign);
29092893
return block;
29102894
}
29112895

@@ -2937,7 +2921,7 @@ codet java_bytecode_convert_methodt::convert_astore(
29372921

29382922
code_assignt array_put(element, op[2]);
29392923
array_put.add_source_location() = location;
2940-
block.move(array_put);
2924+
block.add(array_put);
29412925
return block;
29422926
}
29432927

@@ -3268,6 +3252,6 @@ void java_bytecode_convert_methodt::create_stack_tmp_var(
32683252
{
32693253
const exprt tmp_var=
32703254
tmp_variable(tmp_var_prefix, tmp_var_type);
3271-
block.copy_to_operands(code_assignt(tmp_var, stack_entry));
3255+
block.add(code_assignt(tmp_var, stack_entry));
32723256
stack_entry=tmp_var;
32733257
}

0 commit comments

Comments
 (0)