5 #ifndef CPROVER_GOTO_SYMEX_PATH_STORAGE_H
6 #define CPROVER_GOTO_SYMEX_PATH_STORAGE_H
85 virtual std::size_t
size()
const = 0;
130 inline std::shared_ptr<lexical_loopst>
137 std::unordered_map<irep_idt, std::shared_ptr<lexical_loopst>>
150 std::size_t minimum_index)
152 auto entry = unique_index_map.emplace(
id, minimum_index);
155 entry.first->second = std::max(entry.first->second + 1, minimum_index);
157 return entry.first->second;
170 std::size_t
size()
const override;
171 void clear()
override;
187 std::size_t
size()
const override;
188 void clear()
override;
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
A generic container class for the GOTO intermediate representation of one function.
Central data structure: state.
Wrapper for dirtyt that permits incremental population, ensuring each function is analysed exactly on...
Expression to hold a nondeterministic choice.
FIFO save queue: paths are resumed in the order that they were saved.
void clear() override
Clear all saved paths.
void private_pop() override
patht & private_peek() override
void push(const patht &) override
Add a path to resume to the storage.
std::size_t size() const override
How many paths does this storage contain?
LIFO save queue: depth-first search, try to finish paths.
void private_pop() override
std::list< path_storaget::patht >::iterator last_peeked
void push(const patht &) override
Add a path to resume to the storage.
patht & private_peek() override
std::size_t size() const override
How many paths does this storage contain?
void clear() override
Clear all saved paths.
Storage for symbolic execution paths to be resumed later.
std::size_t get_unique_l2_index(const irep_idt &id)
incremental_dirtyt dirty
Local variables are considered 'dirty' if they've had an address taken and therefore may be referred ...
std::size_t get_unique_l1_index(const irep_idt &id, std::size_t minimum_index)
Provide a unique L1 index for a given id, starting from minimum_index.
std::unordered_map< irep_idt, std::shared_ptr< lexical_loopst > > loop_analysis_map
virtual void clear()=0
Clear all saved paths.
virtual void private_pop()=0
std::shared_ptr< lexical_loopst > get_loop_analysis(const irep_idt &function_id)
std::unordered_map< irep_idt, local_safe_pointerst > safe_pointers
Map function identifiers to local_safe_pointerst instances.
virtual patht & private_peek()=0
virtual void push(const patht &)=0
Add a path to resume to the storage.
std::unordered_map< irep_idt, std::size_t > name_index_mapt
std::size_t get_unique_index(name_index_mapt &unique_index_map, const irep_idt &id, std::size_t minimum_index)
void pop()
Remove the next path to resume from the storage.
patht & peek()
Reference to the next path to resume.
virtual std::size_t size() const =0
How many paths does this storage contain?
name_index_mapt l1_indices
Storage used by get_unique_index.
virtual ~path_storaget()=default
void add_function_loops(const irep_idt &identifier, const goto_programt &body)
Generates a loop analysis for the instructions in goto_programt and keys it against function ID.
symex_nondet_generatort build_symex_nondet
Counter for nondet objects, which require unique names.
name_index_mapt l2_indices
bool empty() const
Is this storage empty?
Functor generating fresh nondet symbols.
nondet_symbol_exprt operator()(typet type, source_locationt location)
Inheriting the interface of symex_targett this class represents the SSA form of the input program as ...
The type of an expression, extends irept.
Variables whose address is taken.
lexical_loops_templatet< const goto_programt, goto_programt::const_targett, goto_programt::target_less_than > lexical_loopst
Local safe pointer analysis.
std::unique_ptr< path_storaget > get_path_strategy(const std::string strategy)
Ensure that is_valid_strategy() returns true for a particular string before calling this function on ...
void parse_path_strategy_options(const cmdlinet &, optionst &, message_handlert &)
add paths and exploration-strategy option, suitable to be invoked from front-ends.
bool is_valid_path_strategy(const std::string strategy)
is there a factory constructor for the named strategy?
std::string show_path_strategies()
suitable for displaying as a front-end help message
#define PRECONDITION(CONDITION)
Information saved at a conditional goto to resume execution.
symex_target_equationt equation
patht(const symex_target_equationt &e, const goto_symex_statet &s)
patht(const patht &other)
Generate Equation using Symbolic Execution.