Skip to content

Commit 60183a3

Browse files
Assign string at malloc site
This is much more efficient than assigning to the object in the case the object is an element of an array.
1 parent 768e8a6 commit 60183a3

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/java_bytecode/java_object_factory.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@ exprt allocate_dynamic_object(
248248
/// \param symbol_table: symbol table
249249
/// \param loc: location in the source
250250
/// \param output_code: code block to which the necessary code is added
251-
void allocate_dynamic_object_with_decl(
251+
/// \return the dynamic object created
252+
exprt allocate_dynamic_object_with_decl(
252253
const exprt &target_expr,
253254
symbol_table_baset &symbol_table,
254255
const source_locationt &loc,
@@ -257,8 +258,7 @@ void allocate_dynamic_object_with_decl(
257258
std::vector<const symbolt *> symbols_created;
258259
code_blockt tmp_block;
259260
const typet &allocate_type=target_expr.type().subtype();
260-
// We will not use the malloc site and can safely ignore it
261-
(void) allocate_dynamic_object(
261+
const exprt dynamic_object = allocate_dynamic_object(
262262
target_expr,
263263
allocate_type,
264264
symbol_table,
@@ -278,6 +278,7 @@ void allocate_dynamic_object_with_decl(
278278

279279
for(const exprt &code : tmp_block.operands())
280280
output_code.add(to_code(code));
281+
return dynamic_object;
281282
}
282283

283284
/// Installs a new symbol in the symbol table, pushing the corresponding symbolt
@@ -701,11 +702,12 @@ static bool add_nondet_string_pointer_initialization(
701702
if(!struct_type.has_component("data") || !struct_type.has_component("length"))
702703
return true;
703704

704-
allocate_dynamic_object_with_decl(expr, symbol_table, loc, code);
705+
const exprt malloc_site =
706+
allocate_dynamic_object_with_decl(expr, symbol_table, loc, code);
705707

706708
code.add(
707709
initialize_nondet_string_struct(
708-
dereference_exprt(expr, struct_type),
710+
dereference_exprt(malloc_site, struct_type),
709711
max_nondet_string_length,
710712
loc,
711713
symbol_table,

src/java_bytecode/java_object_factory.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ exprt allocate_dynamic_object(
146146
std::vector<const symbolt *> &symbols_created,
147147
bool cast_needed = false);
148148

149-
void allocate_dynamic_object_with_decl(
149+
exprt allocate_dynamic_object_with_decl(
150150
const exprt &target_expr,
151151
symbol_table_baset &symbol_table,
152152
const source_locationt &loc,

0 commit comments

Comments
 (0)