CBMC
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
symex_bmc.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Bounded Model Checking for ANSI-C
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
11
12#ifndef CPROVER_GOTO_CHECKER_SYMEX_BMC_H
13#define CPROVER_GOTO_CHECKER_SYMEX_BMC_H
14
15#include <util/threeval.h>
16
18
19#include "symex_coverage.h"
20
21class unwindsett;
22
23class symex_bmct : public goto_symext
24{
25public:
30 const optionst &options,
34
35 // To show progress
37
44 typedef std::function<
45 tvt(const call_stackt &, unsigned, unsigned, unsigned &)>
47
54 typedef std::function<tvt(const irep_idt &, unsigned, unsigned &)>
56
65
74
76 const goto_functionst &goto_functions,
77 const std::string &path) const
78 {
79 return symex_coverage.generate_report(goto_functions, path);
80 }
81
82 const bool record_coverage;
83
85
86protected:
88 std::vector<loop_unwind_handlert> loop_unwind_handlers;
89
92 std::vector<recursion_unwind_handlert> recursion_unwind_handlers;
93
95 override;
96
97 void merge_goto(
98 const symex_targett::sourcet &source,
100 statet &state) override;
101
103 const symex_targett::sourcet &source,
104 const call_stackt &context,
105 unsigned unwind) override;
106
108 const irep_idt &identifier,
109 unsigned thread_nr,
110 unsigned unwind) override;
111
113};
114
115#endif // CPROVER_GOTO_CHECKER_SYMEX_BMC_H
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
A collection of goto functions.
Container for data that varies per program point, e.g.
Definition goto_state.h:32
Central data structure: state.
The main class for the forward symbolic simulator.
Definition goto_symex.h:37
const symbol_table_baset & outer_symbol_table
The symbol table associated with the goto-program being executed.
Definition goto_symex.h:249
static get_goto_functiont get_goto_function(abstract_goto_modelt &goto_model)
Return a function to get/load a goto function from the given goto model Create a default delegate to ...
path_storaget & path_storage
Symbolic execution paths to be resumed later.
Definition goto_symex.h:810
guard_managert & guard_manager
Used to create guards.
Definition goto_symex.h:263
std::function< const goto_functionst::goto_functiont &(const irep_idt &)> get_goto_functiont
The type of delegate functions that retrieve a goto_functiont for a particular function identifier.
Definition goto_symex.h:93
Storage for symbolic execution paths to be resumed later.
The symbol table.
symex_coveraget symex_coverage
Definition symex_bmc.h:112
bool get_unwind_recursion(const irep_idt &identifier, unsigned thread_nr, unsigned unwind) override
std::vector< loop_unwind_handlert > loop_unwind_handlers
Callbacks that may provide an unwind/do-not-unwind decision for a loop.
Definition symex_bmc.h:88
unwindsett & unwindset
Definition symex_bmc.h:84
void merge_goto(const symex_targett::sourcet &source, goto_statet &&goto_state, statet &state) override
Merge a single branch, the symbolic state of which is held in goto_state, into the current overall sy...
Definition symex_bmc.cpp:98
std::function< tvt(const call_stackt &, unsigned, unsigned, unsigned &)> loop_unwind_handlert
Loop unwind handlers take the call stack, loop number, the unwind count so far, and an out-parameter ...
Definition symex_bmc.h:46
source_locationt last_source_location
Definition symex_bmc.h:36
bool output_coverage_report(const goto_functionst &goto_functions, const std::string &path) const
Definition symex_bmc.h:75
void add_recursion_unwind_handler(recursion_unwind_handlert handler)
Add a callback function that will be called to determine whether to unwind recursion.
Definition symex_bmc.h:70
std::vector< recursion_unwind_handlert > recursion_unwind_handlers
Callbacks that may provide an unwind/do-not-unwind decision for a recursive call.
Definition symex_bmc.h:92
void symex_step(const get_goto_functiont &get_goto_function, statet &state) override
show progress
Definition symex_bmc.cpp:43
bool should_stop_unwind(const symex_targett::sourcet &source, const call_stackt &context, unsigned unwind) override
Determine whether to unwind a loop.
void add_loop_unwind_handler(loop_unwind_handlert handler)
Add a callback function that will be called to determine whether to unwind loops.
Definition symex_bmc.h:61
const bool record_coverage
Definition symex_bmc.h:82
std::function< tvt(const irep_idt &, unsigned, unsigned &)> recursion_unwind_handlert
Recursion unwind handlers take the function ID, the unwind count so far, and an out-parameter specify...
Definition symex_bmc.h:55
bool generate_report(const goto_functionst &goto_functions, const std::string &path) const
Inheriting the interface of symex_targett this class represents the SSA form of the input program as ...
Definition threeval.h:20
Symbolic Execution.
This is unused by this implementation of guards, but can be used by other implementations of the same...
Definition guard_expr.h:20
Identifies source in the context of symbolic execution.
Record and print code coverage of symbolic execution.