Skip to content

Commit 4059e3d

Browse files
committed
JBMC: run convert-nondet on a per-function basis
1 parent 24743d1 commit 4059e3d

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
@@ -653,6 +653,28 @@ void jbmc_parse_optionst::process_goto_function(
653653
remove_returns(function);
654654

655655
replace_java_nondet(function);
656+
657+
// Similar removal of java nondet statements:
658+
// TODO Should really get this from java_bytecode_language somehow, but we
659+
// don't have an instance of that here.
660+
object_factory_parameterst factory_params;
661+
factory_params.max_nondet_array_length=
662+
cmdline.isset("java-max-input-array-length")
663+
? std::stoul(cmdline.get_value("java-max-input-array-length"))
664+
: MAX_NONDET_ARRAY_LENGTH_DEFAULT;
665+
factory_params.max_nondet_string_length=
666+
cmdline.isset("string-max-input-length")
667+
? std::stoul(cmdline.get_value("string-max-input-length"))
668+
: MAX_NONDET_STRING_LENGTH;
669+
factory_params.max_nondet_tree_depth=
670+
cmdline.isset("java-max-input-tree-depth")
671+
? std::stoul(cmdline.get_value("java-max-input-tree-depth"))
672+
: MAX_NONDET_TREE_DEPTH;
673+
674+
convert_nondet(
675+
function,
676+
get_message_handler(),
677+
factory_params);
656678
}
657679

658680
catch(const char *e)
@@ -690,28 +712,6 @@ bool jbmc_parse_optionst::process_goto_functions(
690712
// instrument library preconditions
691713
instrument_preconditions(goto_model);
692714

693-
// Similar removal of java nondet statements:
694-
// TODO Should really get this from java_bytecode_language somehow, but we
695-
// don't have an instance of that here.
696-
object_factory_parameterst factory_params;
697-
factory_params.max_nondet_array_length=
698-
cmdline.isset("java-max-input-array-length")
699-
? std::stoul(cmdline.get_value("java-max-input-array-length"))
700-
: MAX_NONDET_ARRAY_LENGTH_DEFAULT;
701-
factory_params.max_nondet_string_length=
702-
cmdline.isset("string-max-input-length")
703-
? std::stoul(cmdline.get_value("string-max-input-length"))
704-
: MAX_NONDET_STRING_LENGTH;
705-
factory_params.max_nondet_tree_depth=
706-
cmdline.isset("java-max-input-tree-depth")
707-
? std::stoul(cmdline.get_value("java-max-input-tree-depth"))
708-
: MAX_NONDET_TREE_DEPTH;
709-
710-
convert_nondet(
711-
goto_model,
712-
get_message_handler(),
713-
factory_params);
714-
715715
// add generic checks
716716
status() << "Generic Property Instrumentation" << eom;
717717
goto_check(options, goto_model);

0 commit comments

Comments
 (0)