|
ESBMC
Efficient SMT-based Context-Bounded Model Checker
|
A path the transition parked for a deferred merge: the sibling arm of a branch, or the continuation a return parked at end_of_function. More...
#include <execution_state.h>
Public Attributes | |
| goto_programt::const_targett | target |
| Instruction at which the parked path will be merged in. | |
| goto_symex_statet::merge_state_listt::iterator | snapshot |
| Direct reference to the parked merge_statet in cur_state->top().merge_state_map[target]. | |
A path the transition parked for a deferred merge: the sibling arm of a branch, or the continuation a return parked at end_of_function.
In both cases the thread's live continuation is the parked state, not its present (falsified) guard.
| goto_symex_statet::merge_state_listt::iterator execution_statet::parked_patht::snapshot |
Direct reference to the parked merge_statet in cur_state->top().merge_state_map[target].
std::list iterators don't invalidate on inserts/erases of other nodes.
WARNING: this iterator is bound to the merge_state_map of the execution_statet that recorded it. When the reachability tree clones an execution_statet via create_next_state(), the clone rebuilds its own threads_state / merge_state_maps but the defaulted operator= still copies this iterator unchanged. On the clone, snapshot therefore points into the parent's merge_state_map.
This is currently sound because (a) the parent's exploration frame stays alive in exploration_frames until backtrack and (b) the only consumer (preserve_last_paths, called once from update_after_switch_point) runs before anything mutates the parent's merge_state_map. If you add code that mutates the parent's merge_state_map between clone and preserve, or that consumes this iterator later than the very next switch, the iterator dereference will read corrupted data — fix by snapshotting the {guard, num_instructions, value_set} at record time instead of storing the iterator.
| goto_programt::const_targett execution_statet::parked_patht::target |
Instruction at which the parked path will be merged in.