Skip to content

Commit 18459ef

Browse files
authored
Merge pull request diffblue#4532 from tautschnig/4524-follow-up
Java bytecode conversion: inline or move temporaries
2 parents dcf6225 + 1e9d135 commit 18459ef

File tree

3 files changed

+38
-52
lines changed

3 files changed

+38
-52
lines changed

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
859859
local_symbol.type = java_reference_type(struct_tag_type);
860860
local_symbol.mode=ID_java;
861861
symbol_table.add(local_symbol);
862-
const auto &local_symexpr=local_symbol.symbol_expr();
862+
const auto local_symexpr = local_symbol.symbol_expr();
863863

864864
code_declt declare_cloned(local_symexpr);
865865

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

+24-39
Original file line numberDiff line numberDiff line change
@@ -1621,15 +1621,12 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
16211621
{
16221622
PRECONDITION(op.size() == 1 && results.size() == 1);
16231623

1624-
const typecast_exprt pointer(op[0], java_array_type(statement[0]));
1625-
1626-
dereference_exprt array{pointer};
1627-
PRECONDITION(pointer.type().subtype().id() == ID_struct_tag);
1624+
dereference_exprt array{
1625+
typecast_exprt{op[0], java_array_type(statement[0])}};
1626+
PRECONDITION(array.type().id() == ID_struct_tag);
16281627
array.set(ID_java_member_access, true);
16291628

1630-
const member_exprt length(array, "length", java_int_type());
1631-
1632-
results[0]=length;
1629+
results[0] = member_exprt{std::move(array), "length", java_int_type()};
16331630
}
16341631
else if(statement=="tableswitch" ||
16351632
statement=="lookupswitch")
@@ -1823,8 +1820,8 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
18231820

18241821
if(start_new_block)
18251822
{
1826-
code_labelt newlabel(label(std::to_string(address)), code_blockt());
1827-
root_block.add(newlabel);
1823+
root_block.add(
1824+
code_labelt{label(std::to_string(address)), code_blockt{}});
18281825
root.branch.push_back(block_tree_nodet::get_leaf());
18291826
assert((root.branch_addresses.empty() ||
18301827
root.branch_addresses.back()<address) &&
@@ -1952,10 +1949,9 @@ code_switcht java_bytecode_convert_methodt::convert_switch(
19521949
if(a_it == args.begin())
19531950
{
19541951
code_switch_caset code_case(nil_exprt(), std::move(code));
1955-
code_case.add_source_location() = location;
19561952
code_case.set_default();
19571953

1958-
code_block.add(std::move(code_case));
1954+
code_block.add(std::move(code_case), location);
19591955
}
19601956
else
19611957
{
@@ -1964,9 +1960,7 @@ code_switcht java_bytecode_convert_methodt::convert_switch(
19641960
case_op.add_source_location() = location;
19651961

19661962
code_switch_caset code_case(std::move(case_op), std::move(code));
1967-
code_case.add_source_location() = location;
1968-
1969-
code_block.add(std::move(code_case));
1963+
code_block.add(std::move(code_case), location);
19701964
}
19711965
}
19721966
}
@@ -2490,7 +2484,7 @@ code_blockt java_bytecode_convert_methodt::convert_newarray(
24902484
constant_exprt size_limit = from_integer(max_array_length, java_int_type());
24912485
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
24922486
code_assumet assume_le_max_size(le_max_size);
2493-
block.add(assume_le_max_size);
2487+
block.add(std::move(assume_le_max_size));
24942488
}
24952489
const exprt tmp = tmp_variable("newarray", ref_type);
24962490
block.add(code_assignt(tmp, java_new_array));
@@ -2693,10 +2687,10 @@ code_blockt java_bytecode_convert_methodt::convert_iinc(
26932687

26942688
const exprt arg1_int_type =
26952689
typecast_exprt::conditional_cast(arg1, java_int_type());
2696-
const code_assignt code_assign(
2690+
code_assignt code_assign(
26972691
variable(arg0, 'i', address, NO_CAST),
26982692
plus_exprt(variable(arg0, 'i', address, CAST_AS_NEEDED), arg1_int_type));
2699-
block.add(code_assign);
2693+
block.add(std::move(code_assign));
27002694

27012695
return block;
27022696
}
@@ -2829,20 +2823,16 @@ exprt java_bytecode_convert_methodt::convert_aload(
28292823
const irep_idt &statement,
28302824
const exprt::operandst &op) const
28312825
{
2832-
const char &type_char = statement[0];
2833-
const typecast_exprt pointer(op[0], java_array_type(type_char));
2834-
2835-
dereference_exprt deref{pointer};
2826+
const char type_char = statement[0];
2827+
dereference_exprt deref{typecast_exprt{op[0], java_array_type(type_char)}};
28362828
deref.set(ID_java_member_access, true);
28372829

2838-
const member_exprt data_ptr(
2830+
member_exprt data_ptr(
28392831
deref, "data", pointer_type(java_type_from_char(type_char)));
2840-
2841-
plus_exprt data_plus_offset{data_ptr, op[1]};
2832+
plus_exprt data_plus_offset{std::move(data_ptr), op[1]};
28422833
// tag it so it's easy to identify during instrumentation
28432834
data_plus_offset.set(ID_java_array_access, true);
2844-
const dereference_exprt element{data_plus_offset};
2845-
return java_bytecode_promotion(element);
2835+
return java_bytecode_promotion(dereference_exprt{data_plus_offset});
28462836
}
28472837

28482838
code_blockt java_bytecode_convert_methodt::convert_store(
@@ -2860,15 +2850,15 @@ code_blockt java_bytecode_convert_methodt::convert_store(
28602850
toassign = typecast_exprt::conditional_cast(toassign, var.type());
28612851

28622852
code_blockt block;
2853+
block.add_source_location() = location;
28632854

28642855
save_stack_entries(
28652856
"stack_store",
28662857
block,
28672858
bytecode_write_typet::VARIABLE,
28682859
var_name);
2869-
code_assignt assign(var, toassign);
2870-
assign.add_source_location() = location;
2871-
block.add(assign);
2860+
2861+
block.add(code_assignt{var, toassign}, location);
28722862
return block;
28732863
}
28742864

@@ -2878,28 +2868,23 @@ code_blockt java_bytecode_convert_methodt::convert_astore(
28782868
const source_locationt &location)
28792869
{
28802870
const char type_char = statement[0];
2881-
const typecast_exprt pointer(op[0], java_array_type(type_char));
2882-
2883-
dereference_exprt deref{pointer};
2871+
dereference_exprt deref{typecast_exprt{op[0], java_array_type(type_char)}};
28842872
deref.set(ID_java_member_access, true);
28852873

2886-
const member_exprt data_ptr(
2874+
member_exprt data_ptr(
28872875
deref, "data", pointer_type(java_type_from_char(type_char)));
2888-
2889-
plus_exprt data_plus_offset{data_ptr, op[1]};
2876+
plus_exprt data_plus_offset{std::move(data_ptr), op[1]};
28902877
// tag it so it's easy to identify during instrumentation
28912878
data_plus_offset.set(ID_java_array_access, true);
2892-
const dereference_exprt element{data_plus_offset};
28932879

28942880
code_blockt block;
28952881
block.add_source_location() = location;
28962882

28972883
save_stack_entries(
28982884
"stack_astore", block, bytecode_write_typet::ARRAY_REF, "");
28992885

2900-
code_assignt array_put(element, op[2]);
2901-
array_put.add_source_location() = location;
2902-
block.add(array_put);
2886+
code_assignt array_put{dereference_exprt{data_plus_offset}, op[2]};
2887+
block.add(std::move(array_put), location);
29032888
return block;
29042889
}
29052890

jbmc/src/java_bytecode/java_string_library_preprocess.cpp

+13-12
Original file line numberDiff line numberDiff line change
@@ -468,10 +468,8 @@ refined_string_exprt java_string_library_preprocesst::decl_string_expr(
468468
array_type, "cprover_string_content", loc, function_id, symbol_table);
469469
const symbol_exprt content_field = sym_content.symbol_expr();
470470
code.add(code_declt(content_field), loc);
471-
const refined_string_exprt str{
472-
length_field, content_field, refined_string_type};
473-
code.add(code_declt(length_field), loc);
474-
return str;
471+
code.add(code_declt{length_field}, loc);
472+
return refined_string_exprt{length_field, content_field, refined_string_type};
475473
}
476474

477475
/// add symbols with prefix cprover_string_length and cprover_string_data and
@@ -601,10 +599,10 @@ exprt make_nondet_infinite_char_array(
601599
const symbol_exprt data_pointer = data_sym.symbol_expr();
602600
code.add(code_declt(data_pointer));
603601
code.add(make_allocate_code(data_pointer, array_type.size()));
604-
const exprt nondet_data = side_effect_expr_nondett(array_type, loc);
605-
const exprt data = dereference_exprt{data_pointer};
606-
code.add(code_assignt(data, nondet_data), loc);
607-
return data;
602+
side_effect_expr_nondett nondet_data{array_type, loc};
603+
dereference_exprt data{data_pointer};
604+
code.add(code_assignt{data, std::move(nondet_data)}, loc);
605+
return std::move(data);
608606
}
609607

610608
/// Add a call to a primitive of the string solver, letting it know that
@@ -847,8 +845,8 @@ void java_string_library_preprocesst::code_assign_java_string_to_string_expr(
847845

848846
// Assignments
849847
code.add(code_assignt(lhs.length(), rhs_length), loc);
850-
const exprt data_as_array = get_data(deref, symbol_table);
851-
code.add(code_assignt(lhs.content(), data_as_array), loc);
848+
exprt data_as_array = get_data(deref, symbol_table);
849+
code.add(code_assignt{lhs.content(), std::move(data_as_array)}, loc);
852850
}
853851

854852
/// Create a string expression whose value is given by a literal
@@ -868,9 +866,12 @@ java_string_library_preprocesst::string_literal_to_string_expr(
868866
symbol_table_baset &symbol_table,
869867
code_blockt &code)
870868
{
871-
const constant_exprt expr(s, string_typet());
872869
return string_expr_of_function(
873-
ID_cprover_string_literal_func, {expr}, loc, symbol_table, code);
870+
ID_cprover_string_literal_func,
871+
{constant_exprt{s, string_typet{}}},
872+
loc,
873+
symbol_table,
874+
code);
874875
}
875876

876877
/// Provide code for the String.valueOf(F) function.

0 commit comments

Comments
 (0)