Skip to content

Commit 6aa36b9

Browse files
authored
Merge pull request diffblue#520 from diffblue/smowton/fix/parameter-names-for-abstract-functions
Assign parameter names to abstract functions
2 parents 8776a4d + 264bc6f commit 6aa36b9

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

cbmc/jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class patternt
8585
/// \return Assigns parameter names (side-effects on `ftype`) to function stub
8686
/// parameters, which are initially nameless as method conversion hasn't
8787
/// happened. Also creates symbols in `symbol_table`.
88-
static void assign_parameter_names(
88+
void assign_parameter_names(
8989
code_typet &ftype,
9090
const irep_idt &name_prefix,
9191
symbol_table_baset &symbol_table)

cbmc/jbmc/src/java_bytecode/java_bytecode_convert_method.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,9 @@ void java_bytecode_convert_method_lazy(
4646
symbol_tablet &symbol_table,
4747
message_handlert &);
4848

49+
void assign_parameter_names(
50+
code_typet &ftype,
51+
const irep_idt &name_prefix,
52+
symbol_table_baset &symbol_table);
53+
4954
#endif // CPROVER_JAVA_BYTECODE_JAVA_BYTECODE_CONVERT_METHOD_H

src/driver/sec_driver_parse_options.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <analyses/local_may_alias.h>
3333

3434
#include <java_bytecode/convert_java_nondet.h>
35+
#include <java_bytecode/java_bytecode_convert_method.h>
3536
#include <java_bytecode/remove_exceptions.h>
3637
#include <java_bytecode/remove_instanceof.h>
3738
#include <java_bytecode/remove_java_new.h>
@@ -659,17 +660,31 @@ bool sec_driver_parse_optionst::generate_function_body(
659660
goto_functiont &function,
660661
bool body_available)
661662
{
663+
const symbolt *symbol = symbol_table.lookup(function_name);
664+
662665
// Provide a simple stub implementation for any function we don't have a
663666
// bytecode implementation for:
664667
if(body_available || !can_generate_function_body(function_name))
665668
{
666-
const symbolt *symbol = symbol_table.lookup(function_name);
667669
if(symbol == nullptr || !symbol->type.get_bool(ID_C_abstract))
668670
return false;
669671
}
670672

671-
if(symbol_table.lookup_ref(function_name).mode == ID_java)
673+
if(symbol->mode == ID_java)
672674
{
675+
code_typet code_type = to_code_type(symbol->type);
676+
677+
// Note this may invalidate pointer `symbol` by adding to the symtab, so:
678+
symbol = nullptr;
679+
680+
if(
681+
code_type.parameters().size() != 0 &&
682+
code_type.parameters()[0].get_identifier().empty())
683+
{
684+
assign_parameter_names(code_type, function_name, symbol_table);
685+
symbol_table.get_writeable_ref(function_name).type = code_type;
686+
}
687+
673688
java_generate_simple_method_stub(
674689
function_name,
675690
symbol_table,

0 commit comments

Comments
 (0)