CBMC
|
The common case of history is to only care about where you are now, not how you got there! Invariants are not checkable due to C++... More...
#include <ai_history.h>
Public Member Functions | |
ahistoricalt (locationt l) | |
ahistoricalt (const ahistoricalt &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 Attributes | |
locationt | current |
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 |
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 &) | |
The common case of history is to only care about where you are now, not how you got there! Invariants are not checkable due to C++...
Definition at line 154 of file ai_history.h.
|
inlineexplicit |
Definition at line 161 of file ai_history.h.
|
inline |
Definition at line 165 of file ai_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 216 of file ai_history.h.
|
inlineoverridevirtual |
The order for history_sett.
Implements ai_history_baset.
Definition at line 195 of file ai_history.h.
|
inlineoverridevirtual |
History objects should be comparable.
Implements ai_history_baset.
Definition at line 203 of file ai_history.h.
|
inlineoverridevirtual |
Reimplemented from ai_history_baset.
Definition at line 229 of file ai_history.h.
|
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 224 of file ai_history.h.
|
inlineoverridevirtual |
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 170 of file ai_history.h.
|
protected |
Definition at line 158 of file ai_history.h.