CBMC
|
Whether we track forwards and / or backwards jumps is compile-time fixed as it does not need to be variable and because there may be a lot of history objects created. More...
#include <local_control_flow_history.h>
Public Member Functions | |
bool | is_path_merge_history (void) const |
bool | has_histories_per_location_limit (void) const |
local_control_flow_historyt (locationt loc) | |
local_control_flow_historyt (locationt loc, lcfd_ptrt hist, size_t max_hist) | |
local_control_flow_historyt (locationt loc, size_t max_hist) | |
local_control_flow_historyt (const local_control_flow_historyt< track_forward_jumps, track_backward_jumps > &old) | |
step_returnt | step (locationt to, const trace_sett &others, trace_ptrt caller_hist) const override |
Step creates a new history by advancing the current one to location "to" It is given the set of all other histories that have reached this point. More... | |
bool | operator< (const ai_history_baset &op) const override |
The order for history_sett. More... | |
bool | operator== (const ai_history_baset &op) const override |
History objects should be comparable. More... | |
const locationt & | current_location (void) const override |
The current location in the history, used to compute the transformer POSTCONDITION(return value is dereferenceable) More... | |
bool | should_widen (const ai_history_baset &other) const override |
Domains with a substantial height may need to widen when merging this method allows the history to provide a hint on when to do this The suggested use of this is for domains merge operation to check this and then widen in a domain specific way. More... | |
void | output (std::ostream &out) const override |
Public Member Functions inherited from ai_history_baset | |
virtual | ~ai_history_baset () |
virtual jsont | output_json (void) const |
virtual xmlt | output_xml (void) const |
Protected Types | |
typedef local_control_flow_decisiont::lcfd_ptrt | lcfd_ptrt |
Protected Member Functions | |
std::shared_ptr< const local_control_flow_historyt< track_forward_jumps, track_backward_jumps > > | to_local_control_flow_history (trace_ptrt in) const |
Protected Member Functions inherited from ai_history_baset | |
ai_history_baset (locationt) | |
Create a new history starting from a given location This is used to start the analysis from scratch PRECONDITION(l.is_dereferenceable());. More... | |
ai_history_baset (const ai_history_baset &) | |
Protected Attributes | |
locationt | current_loc |
lcfd_ptrt | control_flow_decision_history |
size_t | max_histories_per_location |
Additional Inherited Members | |
Public Types inherited from ai_history_baset | |
enum class | step_statust { NEW , MERGED , BLOCKED } |
typedef goto_programt::const_targett | locationt |
typedef std::shared_ptr< const ai_history_baset > | trace_ptrt |
History objects are intended to be immutable so they can be shared to reduce memory overhead. More... | |
typedef std::set< trace_ptrt, compare_historyt > | trace_sett |
typedef std::pair< step_statust, trace_ptrt > | step_returnt |
Static Public Attributes inherited from ai_history_baset | |
static const trace_ptrt | no_caller_history |
Whether we track forwards and / or backwards jumps is compile-time fixed as it does not need to be variable and because there may be a lot of history objects created.
Definition at line 45 of file local_control_flow_history.h.
|
protected |
Definition at line 48 of file local_control_flow_history.h.
|
inlineexplicit |
Definition at line 83 of file local_control_flow_history.h.
|
inline |
Definition at line 92 of file local_control_flow_history.h.
|
inline |
Definition at line 100 of file local_control_flow_history.h.
|
inline |
Definition at line 109 of file local_control_flow_history.h.
|
inlineoverridevirtual |
The current location in the history, used to compute the transformer POSTCONDITION(return value is dereferenceable)
Implements ai_history_baset.
Definition at line 127 of file local_control_flow_history.h.
|
inline |
Definition at line 78 of file local_control_flow_history.h.
|
inline |
Definition at line 71 of file local_control_flow_history.h.
|
overridevirtual |
The order for history_sett.
Implements ai_history_baset.
Definition at line 157 of file local_control_flow_history.cpp.
|
overridevirtual |
History objects should be comparable.
Implements ai_history_baset.
Definition at line 208 of file local_control_flow_history.cpp.
|
overridevirtual |
Reimplemented from ai_history_baset.
Definition at line 249 of file local_control_flow_history.cpp.
|
inlineoverridevirtual |
Domains with a substantial height may need to widen when merging this method allows the history to provide a hint on when to do this The suggested use of this is for domains merge operation to check this and then widen in a domain specific way.
However it could be used in other ways (such as the transformer). The key idea is that the history tracks / should know when to widen and when to continue.
Reimplemented from ai_history_baset.
Definition at line 135 of file local_control_flow_history.h.
|
overridevirtual |
Step creates a new history by advancing the current one to location "to" It is given the set of all other histories that have reached this point.
In the case of function call return it is also given the full history of the caller. This allows function-local histories as they can "pick up" the state from before the call when computing the return edge.
PRECONDITION(to.id_dereferenceable()); PRECONDITION(to in goto_program.get_successors(current_location()) || current_location()->is_function_call() || current_location()->is_end_function()); PRECONDITION(caller_hist == no_caller_history || current_location()->is_end_function);
Step may do one of three things :
Implements ai_history_baset.
Definition at line 16 of file local_control_flow_history.cpp.
|
inlineprotected |
Definition at line 59 of file local_control_flow_history.h.
|
protected |
Definition at line 51 of file local_control_flow_history.h.
|
protected |
Definition at line 50 of file local_control_flow_history.h.
|
protected |
Definition at line 52 of file local_control_flow_history.h.