Skip to content

Commit db3bc99

Browse files
committed
JBMC: run convert-nondet on a per-function basis
1 parent 99ea8fe commit db3bc99

File tree

3 files changed

+48
-22
lines changed

3 files changed

+48
-22
lines changed

src/goto-programs/convert_nondet.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,20 @@ void convert_nondet(
130130
}
131131
}
132132

133+
void convert_nondet(
134+
goto_model_functiont &function,
135+
message_handlert &message_handler,
136+
const object_factory_parameterst &object_factory_parameters)
137+
{
138+
convert_nondet(
139+
function.get_goto_function().body,
140+
function.get_symbol_table(),
141+
message_handler,
142+
object_factory_parameters);
143+
144+
function.compute_location_numbers();
145+
}
146+
133147
void convert_nondet(
134148
goto_functionst &goto_functions,
135149
symbol_tablet &symbol_table,

src/goto-programs/convert_nondet.h

+12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Author: Reuben Thomas, [email protected]
1717
class goto_functionst;
1818
class symbol_tablet;
1919
class goto_modelt;
20+
class goto_model_functiont;
2021
class message_handlert;
2122
struct object_factory_parameterst;
2223

@@ -38,4 +39,15 @@ void convert_nondet(
3839
message_handlert &,
3940
const object_factory_parameterst &object_factory_parameters);
4041

42+
/// Replace calls to nondet library functions with an internal nondet
43+
/// representation.
44+
/// \param function: goto program to modify
45+
/// \param message_handler: For error logging.
46+
/// \param object_factory_parameters: Parameters for the generation of nondet
47+
/// objects.
48+
void convert_nondet(
49+
goto_model_functiont &function,
50+
message_handlert &message_handler,
51+
const object_factory_parameterst &object_factory_parameters);
52+
4153
#endif

src/jbmc/jbmc_parse_options.cpp

+22-22
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,28 @@ void jbmc_parse_optionst::process_goto_function(
666666
remove_returns(function, function_is_stub);
667667

668668
replace_java_nondet(function);
669+
670+
// Similar removal of java nondet statements:
671+
// TODO Should really get this from java_bytecode_language somehow, but we
672+
// don't have an instance of that here.
673+
object_factory_parameterst factory_params;
674+
factory_params.max_nondet_array_length=
675+
cmdline.isset("java-max-input-array-length")
676+
? std::stoul(cmdline.get_value("java-max-input-array-length"))
677+
: MAX_NONDET_ARRAY_LENGTH_DEFAULT;
678+
factory_params.max_nondet_string_length=
679+
cmdline.isset("string-max-input-length")
680+
? std::stoul(cmdline.get_value("string-max-input-length"))
681+
: MAX_NONDET_STRING_LENGTH;
682+
factory_params.max_nondet_tree_depth=
683+
cmdline.isset("java-max-input-tree-depth")
684+
? std::stoul(cmdline.get_value("java-max-input-tree-depth"))
685+
: MAX_NONDET_TREE_DEPTH;
686+
687+
convert_nondet(
688+
function,
689+
get_message_handler(),
690+
factory_params);
669691
}
670692

671693
catch(const char *e)
@@ -703,28 +725,6 @@ bool jbmc_parse_optionst::process_goto_functions(
703725
// instrument library preconditions
704726
instrument_preconditions(goto_model);
705727

706-
// Similar removal of java nondet statements:
707-
// TODO Should really get this from java_bytecode_language somehow, but we
708-
// don't have an instance of that here.
709-
object_factory_parameterst factory_params;
710-
factory_params.max_nondet_array_length=
711-
cmdline.isset("java-max-input-array-length")
712-
? std::stoul(cmdline.get_value("java-max-input-array-length"))
713-
: MAX_NONDET_ARRAY_LENGTH_DEFAULT;
714-
factory_params.max_nondet_string_length=
715-
cmdline.isset("string-max-input-length")
716-
? std::stoul(cmdline.get_value("string-max-input-length"))
717-
: MAX_NONDET_STRING_LENGTH;
718-
factory_params.max_nondet_tree_depth=
719-
cmdline.isset("java-max-input-tree-depth")
720-
? std::stoul(cmdline.get_value("java-max-input-tree-depth"))
721-
: MAX_NONDET_TREE_DEPTH;
722-
723-
convert_nondet(
724-
goto_model,
725-
get_message_handler(),
726-
factory_params);
727-
728728
// add generic checks
729729
status() << "Generic Property Instrumentation" << eom;
730730
goto_check(options, goto_model);

0 commit comments

Comments
 (0)