Skip to content

User controlled havoc(ing) for memory-snapshot harness #4482

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
May 20, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions src/goto-harness/common_harness_generator_options.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/******************************************************************\

Module: common_harness_generator_options

Author: Diffblue Ltd.

\******************************************************************/

#ifndef CPROVER_GOTO_HARNESS_COMMON_HARNESS_GENERATOR_OPTIONS_H
#define CPROVER_GOTO_HARNESS_COMMON_HARNESS_GENERATOR_OPTIONS_H

#define COMMON_HARNESS_GENERATOR_MIN_NULL_TREE_DEPTH_OPT "min-null-tree-depth"
#define COMMON_HARNESS_GENERATOR_MAX_NONDET_TREE_DEPTH_OPT \
"max-nondet-tree-depth"
#define COMMON_HARNESS_GENERATOR_MIN_ARRAY_SIZE_OPT "min-array-size"
#define COMMON_HARNESS_GENERATOR_MAX_ARRAY_SIZE_OPT "max-array-size"

// clang-format off
#define COMMON_HARNESS_GENERATOR_OPTIONS \
"(" COMMON_HARNESS_GENERATOR_MIN_NULL_TREE_DEPTH_OPT "):" \
"(" COMMON_HARNESS_GENERATOR_MAX_NONDET_TREE_DEPTH_OPT "):" \
"(" COMMON_HARNESS_GENERATOR_MIN_ARRAY_SIZE_OPT "):" \
"(" COMMON_HARNESS_GENERATOR_MAX_ARRAY_SIZE_OPT "):" \
// COMMON_HARNESS_GENERATOR_OPTIONS

// clang-format on

// clang-format off
#define COMMON_HARNESS_GENERATOR_HELP \
"--" COMMON_HARNESS_GENERATOR_MIN_NULL_TREE_DEPTH_OPT \
" N minimum level at which a pointer can first be NULL\n" \
" in a recursively nondet initialized struct\n" \
"--" COMMON_HARNESS_GENERATOR_MAX_NONDET_TREE_DEPTH_OPT \
" N limit size of nondet (e.g. input) object tree;\n" \
" at level N pointers are set to null\n" \
"--" COMMON_HARNESS_GENERATOR_MIN_ARRAY_SIZE_OPT \
" N minimum size of dynamically created arrays\n" \
" (default: 1)\n" \
"--" COMMON_HARNESS_GENERATOR_MAX_ARRAY_SIZE_OPT \
" N maximum size of dynamically created arrays\n" \
" (default: 2)\n" \
// COMMON_HARNESS_GENERATOR_HELP

// clang-format on

#endif // CPROVER_GOTO_HARNESS_COMMON_HARNESS_GENERATOR_OPTIONS_H
48 changes: 18 additions & 30 deletions src/goto-harness/function_harness_generator_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,10 @@ Author: Diffblue Ltd.
#ifndef CPROVER_GOTO_HARNESS_FUNCTION_HARNESS_GENERATOR_OPTIONS_H
#define CPROVER_GOTO_HARNESS_FUNCTION_HARNESS_GENERATOR_OPTIONS_H

#include "common_harness_generator_options.h"

#define FUNCTION_HARNESS_GENERATOR_FUNCTION_OPT "function"
#define FUNCTION_HARNESS_GENERATOR_NONDET_GLOBALS_OPT "nondet-globals"
#define FUNCTION_HARNESS_GENERATOR_MIN_NULL_TREE_DEPTH_OPT "min-null-tree-depth"
#define FUNCTION_HARNESS_GENERATOR_MAX_NONDET_TREE_DEPTH_OPT \
"max-nondet-tree-depth"
#define FUNCTION_HARNESS_GENERATOR_MIN_ARRAY_SIZE_OPT "min-array-size"
#define FUNCTION_HARNESS_GENERATOR_MAX_ARRAY_SIZE_OPT "max-array-size"
#define COMMON_HARNESS_GENERATOR_NONDET_GLOBALS_OPT "nondet-globals"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems surprising that this option isn't in common_harness_generator_options.h?!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, my bad. In fact, it's the other way around. This option is function-harness specific and will be renamed.

#define FUNCTION_HARNESS_GENERATOR_TREAT_POINTER_AS_ARRAY_OPT \
"treat-pointer-as-array"
#define FUNCTION_HARNESS_GENERATOR_ASSOCIATED_ARRAY_SIZE_OPT \
Expand All @@ -26,11 +23,7 @@ Author: Diffblue Ltd.
// clang-format off
#define FUNCTION_HARNESS_GENERATOR_OPTIONS \
"(" FUNCTION_HARNESS_GENERATOR_FUNCTION_OPT "):" \
"(" FUNCTION_HARNESS_GENERATOR_NONDET_GLOBALS_OPT ")" \
"(" FUNCTION_HARNESS_GENERATOR_MIN_NULL_TREE_DEPTH_OPT "):" \
"(" FUNCTION_HARNESS_GENERATOR_MAX_NONDET_TREE_DEPTH_OPT "):" \
"(" FUNCTION_HARNESS_GENERATOR_MIN_ARRAY_SIZE_OPT "):" \
"(" FUNCTION_HARNESS_GENERATOR_MAX_ARRAY_SIZE_OPT "):" \
"(" COMMON_HARNESS_GENERATOR_NONDET_GLOBALS_OPT ")" \
"(" FUNCTION_HARNESS_GENERATOR_TREAT_POINTER_AS_ARRAY_OPT "):" \
"(" FUNCTION_HARNESS_GENERATOR_ASSOCIATED_ARRAY_SIZE_OPT "):" \
"(" FUNCTION_HARNESS_GENERATOR_TREAT_POINTER_AS_CSTRING "):" \
Expand All @@ -42,29 +35,24 @@ Author: Diffblue Ltd.
#define FUNCTION_HARNESS_GENERATOR_HELP \
"function harness generator (--harness-type call-function)\n\n" \
"--" FUNCTION_HARNESS_GENERATOR_FUNCTION_OPT \
" the function the harness should call\n" \
"--" FUNCTION_HARNESS_GENERATOR_NONDET_GLOBALS_OPT \
" set global variables to non-deterministic values in harness\n" \
"--" FUNCTION_HARNESS_GENERATOR_MIN_NULL_TREE_DEPTH_OPT \
" N minimum level at which a pointer can first be\n" \
" NULL in a recursively nondet initialized struct\n" \
"--" FUNCTION_HARNESS_GENERATOR_MAX_NONDET_TREE_DEPTH_OPT \
" N limit size of nondet (e.g. input) object tree;\n" \
" at level N pointers are set to null\n" \
"--" FUNCTION_HARNESS_GENERATOR_MIN_ARRAY_SIZE_OPT \
" N minimum size of dynamically created arrays (default: 1)\n" \
"--" FUNCTION_HARNESS_GENERATOR_MAX_ARRAY_SIZE_OPT \
" N maximum size of dynamically created arrays (default: 2)\n" \
" the function the harness should call\n" \
"--" COMMON_HARNESS_GENERATOR_NONDET_GLOBALS_OPT \
" set global variables to non-deterministic values\n" \
" in harness\n" \
COMMON_HARNESS_GENERATOR_HELP \
"--" FUNCTION_HARNESS_GENERATOR_TREAT_POINTER_AS_ARRAY_OPT \
" parameter treat the function parameter with the name `parameter'\n" \
" as an array\n" \
" p treat the function parameter with the name `p' as\n" \
" an array\n" \
"--" FUNCTION_HARNESS_GENERATOR_ASSOCIATED_ARRAY_SIZE_OPT \
" array_name:size_name\n" \
" set the parameter <size_name> to the size\n"\
" of the array <array_name>\n" \
" (implies " \
"-- " FUNCTION_HARNESS_GENERATOR_ASSOCIATED_ARRAY_SIZE_OPT \
" set the parameter <size_name> to the size" \
" of\n the array <array_name>\n" \
" (implies " \
"-- " FUNCTION_HARNESS_GENERATOR_TREAT_POINTER_AS_ARRAY_OPT \
" <array_name>)\n" \
"--" FUNCTION_HARNESS_GENERATOR_TREAT_POINTER_AS_CSTRING \
" p treat the function parameter with the name `p' as\n" \
" a string of characters\n" \
// FUNCTION_HARNESS_GENERATOR_HELP

// clang-format on
Expand Down
2 changes: 2 additions & 0 deletions src/goto-harness/goto_harness_parse_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ Author: Diffblue Ltd.

#include "function_harness_generator_options.h"
#include "goto_harness_generator_factory.h"
#include "memory_snapshot_harness_generator_options.h"

// clang-format off
#define GOTO_HARNESS_OPTIONS \
"(version)" \
GOTO_HARNESS_FACTORY_OPTIONS \
COMMON_HARNESS_GENERATOR_OPTIONS \
FUNCTION_HARNESS_GENERATOR_OPTIONS \
MEMORY_SNAPSHOT_HARNESS_GENERATOR_OPTIONS \
// end GOTO_HARNESS_OPTIONS
Expand Down
63 changes: 63 additions & 0 deletions src/goto-harness/memory_snapshot_harness_generator_options.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/******************************************************************\

Module: memory_snapshot_harness_generator_options

Author: Diffblue Ltd.

\******************************************************************/

#ifndef CPROVER_GOTO_HARNESS_MEMORY_SNAPSHOT_HARNESS_GENERATOR_OPTIONS_H
#define CPROVER_GOTO_HARNESS_MEMORY_SNAPSHOT_HARNESS_GENERATOR_OPTIONS_H

#include "common_harness_generator_options.h"

#define MEMORY_SNAPSHOT_HARNESS_SNAPSHOT_OPT "memory-snapshot"
#define MEMORY_SNAPSHOT_HARNESS_INITIAL_GOTO_LOC_OPT "initial-goto-location"
#define MEMORY_SNAPSHOT_HARNESS_INITIAL_SOURCE_LOC_OPT "initial-source-location"
#define MEMORY_SNAPSHOT_HARNESS_HAVOC_VARIABLES_OPT "havoc-variables"
#define MEMORY_SNAPSHOT_HARNESS_TREAT_POINTER_AS_ARRAY_OPT "pointer-as-array"
#define MEMORY_SNAPSHOT_HARNESS_ASSOCIATED_ARRAY_SIZE_OPT "size-of-array"

// clang-format off
#define MEMORY_SNAPSHOT_HARNESS_GENERATOR_OPTIONS \
"(" MEMORY_SNAPSHOT_HARNESS_SNAPSHOT_OPT "):" \
"(" MEMORY_SNAPSHOT_HARNESS_INITIAL_GOTO_LOC_OPT "):" \
"(" MEMORY_SNAPSHOT_HARNESS_INITIAL_SOURCE_LOC_OPT "):" \
"(" MEMORY_SNAPSHOT_HARNESS_HAVOC_VARIABLES_OPT "):" \
"(" MEMORY_SNAPSHOT_HARNESS_TREAT_POINTER_AS_ARRAY_OPT "):" \
"(" MEMORY_SNAPSHOT_HARNESS_ASSOCIATED_ARRAY_SIZE_OPT "):" \
// MEMORY_SNAPSHOT_HARNESS_GENERATOR_OPTIONS

// clang-format on

// clang-format off
#define MEMORY_SNAPSHOT_HARNESS_GENERATOR_HELP \
"memory snapshot harness generator (--harness-type\n" \
" initialise-from-memory-snapshot)\n\n" \
"--" MEMORY_SNAPSHOT_HARNESS_SNAPSHOT_OPT " <file> initialise memory " \
"from JSON memory snapshot\n" \
"--" MEMORY_SNAPSHOT_HARNESS_INITIAL_GOTO_LOC_OPT " <func[:<n>]>\n" \
" use given function and location number as " \
"entry\n point\n" \
"--" MEMORY_SNAPSHOT_HARNESS_INITIAL_SOURCE_LOC_OPT " <file:<n>>\n" \
" use given file name and line number as " \
"entry\n point\n" \
"--" MEMORY_SNAPSHOT_HARNESS_HAVOC_VARIABLES_OPT " vars initialise" \
" variables from `vars' to\n" \
" non-deterministic values\n" \
COMMON_HARNESS_GENERATOR_HELP \
"--" MEMORY_SNAPSHOT_HARNESS_TREAT_POINTER_AS_ARRAY_OPT \
" p treat the global pointer with the name `p' as\n" \
" an array\n" \
"--" MEMORY_SNAPSHOT_HARNESS_ASSOCIATED_ARRAY_SIZE_OPT \
" array_name:size_name\n" \
" set the parameter <size_name> to the size" \
" of\n the array <array_name>\n" \
" (implies " \
"-- " MEMORY_SNAPSHOT_HARNESS_TREAT_POINTER_AS_ARRAY_OPT \
" <array_name>)\n" \
// MEMORY_SNAPSHOT_HARNESS_GENERATOR_HELP

// clang-format on

#endif // CPROVER_GOTO_HARNESS_MEMORY_SNAPSHOT_HARNESS_GENERATOR_OPTIONS_H