Skip to content

Commit 2186955

Browse files
author
Daniel Kroening
committed
remove_java_new now takes function identifier
1 parent e0e1811 commit 2186955

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

jbmc/src/java_bytecode/remove_java_new.cpp

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,29 @@ class remove_java_newt : public messaget
3333
}
3434

3535
// Lower java_new for a single function
36-
bool lower_java_new(goto_programt &);
36+
bool lower_java_new(
37+
const irep_idt &function_identifier,
38+
goto_programt &);
3739

3840
// Lower java_new for a single instruction
3941
goto_programt::targett
40-
lower_java_new(goto_programt &, goto_programt::targett);
42+
lower_java_new(
43+
const irep_idt &function_identifier,
44+
goto_programt &, goto_programt::targett);
4145

4246
protected:
4347
symbol_table_baset &symbol_table;
4448
namespacet ns;
4549

4650
goto_programt::targett lower_java_new(
51+
const irep_idt &function_identifier,
4752
exprt lhs,
4853
side_effect_exprt rhs,
4954
goto_programt &,
5055
goto_programt::targett);
5156

5257
goto_programt::targett lower_java_new_array(
58+
const irep_idt &function_identifier,
5359
exprt lhs,
5460
side_effect_exprt rhs,
5561
goto_programt &,
@@ -68,6 +74,7 @@ class remove_java_newt : public messaget
6874
/// Note: we have to take a copy of `lhs` and `rhs` since they would suffer
6975
/// destruction when replacing the instruction.
7076
goto_programt::targett remove_java_newt::lower_java_new(
77+
const irep_idt &function_identifier,
7178
exprt lhs,
7279
side_effect_exprt rhs,
7380
goto_programt &dest,
@@ -116,6 +123,7 @@ goto_programt::targett remove_java_newt::lower_java_new(
116123
/// Note: we have to take a copy of `lhs` and `rhs` since they would suffer
117124
/// destruction when replacing the instruction.
118125
goto_programt::targett remove_java_newt::lower_java_new_array(
126+
const irep_idt &function_identifier,
119127
exprt lhs,
120128
side_effect_exprt rhs,
121129
goto_programt &dest,
@@ -206,7 +214,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
206214
// `x=typecast_exprt(side_effect_exprt(...))`
207215
symbol_exprt new_array_data_symbol = get_fresh_aux_symbol(
208216
data_java_new_expr.type(),
209-
id2string(target->function),
217+
id2string(function_identifier),
210218
"tmp_new_data_array",
211219
location,
212220
ID_java,
@@ -254,7 +262,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
254262

255263
symbol_exprt tmp_i = get_fresh_aux_symbol(
256264
length.type(),
257-
id2string(target->function),
265+
id2string(function_identifier),
258266
"tmp_index",
259267
location,
260268
ID_java,
@@ -288,7 +296,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
288296
code_blockt for_body;
289297
symbol_exprt init_sym = get_fresh_aux_symbol(
290298
sub_type,
291-
id2string(target->function),
299+
id2string(function_identifier),
292300
"subarray_init",
293301
location,
294302
ID_java,
@@ -312,7 +320,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
312320
goto_convert(for_loop, symbol_table, tmp, get_message_handler(), ID_java);
313321

314322
// lower new side effects recursively
315-
lower_java_new(tmp);
323+
lower_java_new(function_identifier, tmp);
316324

317325
dest.destructive_insert(next, tmp);
318326
}
@@ -326,6 +334,7 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
326334
/// \param target: instruction to check for java_new expressions
327335
/// \return true if a replacement has been made
328336
goto_programt::targett remove_java_newt::lower_java_new(
337+
const irep_idt &function_identifier,
329338
goto_programt &goto_program,
330339
goto_programt::targett target)
331340
{
@@ -339,13 +348,13 @@ goto_programt::targett remove_java_newt::lower_java_new(
339348

340349
if(rhs.id() == ID_side_effect && rhs.get(ID_statement) == ID_java_new)
341350
{
342-
return lower_java_new(lhs, to_side_effect_expr(rhs), goto_program, target);
351+
return lower_java_new(function_identifier, lhs, to_side_effect_expr(rhs), goto_program, target);
343352
}
344353

345354
if(rhs.id() == ID_side_effect && rhs.get(ID_statement) == ID_java_new_array)
346355
{
347356
return lower_java_new_array(
348-
lhs, to_side_effect_expr(rhs), goto_program, target);
357+
function_identifier, lhs, to_side_effect_expr(rhs), goto_program, target);
349358
}
350359

351360
return target;
@@ -356,15 +365,17 @@ goto_programt::targett remove_java_newt::lower_java_new(
356365
/// Extra auxiliary variables may be introduced into symbol_table.
357366
/// \param goto_program: The function body to work on.
358367
/// \return true if one or more java_new expressions have been replaced
359-
bool remove_java_newt::lower_java_new(goto_programt &goto_program)
368+
bool remove_java_newt::lower_java_new(
369+
const irep_idt &function_identifier,
370+
goto_programt &goto_program)
360371
{
361372
bool changed = false;
362373
for(goto_programt::instructionst::iterator target =
363374
goto_program.instructions.begin();
364375
target != goto_program.instructions.end();
365376
++target)
366377
{
367-
goto_programt::targett new_target = lower_java_new(goto_program, target);
378+
goto_programt::targett new_target = lower_java_new(function_identifier, goto_program, target);
368379
changed = changed || new_target == target;
369380
target = new_target;
370381
}
@@ -382,13 +393,14 @@ bool remove_java_newt::lower_java_new(goto_programt &goto_program)
382393
/// \param symbol_table: The symbol table to add symbols to.
383394
/// \param message_handler: a message handler
384395
void remove_java_new(
396+
const irep_idt &function_identifier,
385397
goto_programt::targett target,
386398
goto_programt &goto_program,
387399
symbol_table_baset &symbol_table,
388400
message_handlert &message_handler)
389401
{
390402
remove_java_newt rem(symbol_table, message_handler);
391-
rem.lower_java_new(goto_program, target);
403+
rem.lower_java_new(function_identifier, goto_program, target);
392404
}
393405

394406
/// Replace every java_new or java_new_array by a malloc side-effect
@@ -398,12 +410,13 @@ void remove_java_new(
398410
/// \param symbol_table: The symbol table to add symbols to.
399411
/// \param message_handler: a message handler
400412
void remove_java_new(
413+
const irep_idt &function_identifier,
401414
goto_functionst::goto_functiont &function,
402415
symbol_table_baset &symbol_table,
403416
message_handlert &message_handler)
404417
{
405418
remove_java_newt rem(symbol_table, message_handler);
406-
rem.lower_java_new(function.body);
419+
rem.lower_java_new(function_identifier, function.body);
407420
}
408421

409422
/// Replace every java_new or java_new_array by a malloc side-effect
@@ -420,7 +433,7 @@ void remove_java_new(
420433
remove_java_newt rem(symbol_table, message_handler);
421434
bool changed = false;
422435
for(auto &f : goto_functions.function_map)
423-
changed = rem.lower_java_new(f.second.body) || changed;
436+
changed = rem.lower_java_new(f.first, f.second.body) || changed;
424437
if(changed)
425438
goto_functions.compute_location_numbers();
426439
}

jbmc/src/java_bytecode/remove_java_new.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ Author: Peter Schrammel
2020
class message_handlert;
2121

2222
void remove_java_new(
23+
const irep_idt &function_identifier,
2324
goto_programt::targett target,
2425
goto_programt &goto_program,
2526
symbol_table_baset &symbol_table,
2627
message_handlert &_message_handler);
2728

2829
void remove_java_new(
30+
const irep_idt &function_identifier,
2931
goto_functionst::goto_functiont &function,
3032
symbol_table_baset &symbol_table,
3133
message_handlert &_message_handler);

0 commit comments

Comments
 (0)