CBMC
goto_symex.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Symbolic Execution
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_GOTO_SYMEX_GOTO_SYMEX_H
13 #define CPROVER_GOTO_SYMEX_GOTO_SYMEX_H
14 
15 #include <util/message.h>
16 
17 #include "complexity_limiter.h"
18 #include "shadow_memory.h"
19 #include "symex_config.h"
20 #include "symex_target_equation.h"
21 
22 class address_of_exprt;
24 class goto_symex_statet;
25 class path_storaget;
27 class side_effect_exprt;
28 class symex_assignt;
29 class typet;
30 
37 {
38 public:
41 
52  message_handlert &mh,
54  symex_target_equationt &_target,
55  const optionst &options,
58  : should_pause_symex(false),
59  symex_config(options),
63  target(_target),
65  log(mh),
68  _total_vccs(std::numeric_limits<unsigned>::max()),
69  _remaining_vccs(std::numeric_limits<unsigned>::max()),
70  complexity_module(mh, options),
72  std::bind(
74  this,
75  std::placeholders::_1,
76  std::placeholders::_2,
77  std::placeholders::_3),
78  ns,
79  mh)
80  {
81  }
82 
84  virtual ~goto_symext() = default;
85 
91  typedef
92  std::function<const goto_functionst::goto_functiont &(const irep_idt &)>
94 
103 
115  [[nodiscard]] virtual symbol_tablet symex_from_entry_point_of(
117  const shadow_memory_field_definitionst &fields);
118 
127  symbol_table_baset &new_symbol_table,
128  const shadow_memory_field_definitionst &fields);
129 
140  [[nodiscard]] virtual symbol_tablet resume_symex_from_saved_state(
142  const statet &saved_state,
143  symex_target_equationt *saved_equation);
144 
157  [[nodiscard]] virtual symbol_tablet
158  symex_with_state(statet &state, const get_goto_functiont &get_goto_functions);
159 
168 
171  bool ignore_assertions = false;
172 
181  virtual bool check_break(const irep_idt &loop_id, unsigned unwind);
182 
183 protected:
186 
191  std::unique_ptr<statet>
193 
199  void symex_threaded_step(
200  statet &state,
202 
210  virtual void
212 
223  statet &state);
224 
229 
232  void print_symex_step(statet &state);
233 
236 
237 public:
238 
242 
243 protected:
250 
259 
264 
267 
271 
275  std::vector<symbol_exprt> instruction_local_symbols;
276 
278  mutable messaget log;
279 
281 
291  exprt clean_expr(exprt expr, statet &state, bool write);
292 
293  void trigger_auto_object(const exprt &, statet &);
294  void initialize_auto_object(const exprt &, statet &);
295 
300  void process_array_expr(statet &, exprt &);
301  exprt make_auto_object(const typet &, statet &);
302  virtual void dereference(exprt &, statet &, bool write);
303 
304  symbol_exprt cache_dereference(exprt &dereference_result, statet &state);
305  void dereference_rec(
306  exprt &expr,
307  statet &state,
308  bool write,
309  bool is_in_quantifier);
311  const exprt &,
312  statet &,
313  bool keep_array);
314 
317  virtual void symex_goto(statet &state);
324  void symex_set_return_value(statet &state, const exprt &return_value);
327  virtual void symex_start_thread(statet &state);
330  virtual void symex_atomic_begin(statet &state);
333  virtual void symex_atomic_end(statet &state);
336  virtual void symex_decl(statet &state);
341  virtual void symex_decl(statet &state, const symbol_exprt &expr);
344  virtual void symex_dead(statet &state);
348  void symex_dead(statet &state, const symbol_exprt &symbol_expr);
351  virtual void symex_other(statet &state);
352 
354 
365  goto_symex_statet &current_state,
366  goto_statet &jump_taken_state,
367  goto_statet &jump_not_taken_state,
368  const exprt &original_guard,
369  const exprt &new_guard,
370  const namespacet &ns);
371 
389  exprt condition,
390  const value_sett &original_value_set,
391  value_sett *jump_taken_value_set,
392  value_sett *jump_not_taken_value_set,
393  const namespacet &ns);
394 
400  virtual void vcc(
401  const exprt &cond,
402  const irep_idt &property_id,
403  const std::string &msg,
404  statet &state);
405 
410  virtual void symex_assume(statet &state, const exprt &cond);
411  void symex_assume_l2(statet &, const exprt &cond);
412 
417  void merge_gotos(statet &state);
418 
425  virtual void merge_goto(
426  const symex_targett::sourcet &source,
427  goto_statet &&goto_state,
428  statet &state);
429 
433  void phi_function(const goto_statet &goto_state, statet &dest_state);
434 
440  virtual bool should_stop_unwind(
441  const symex_targett::sourcet &source,
442  const call_stackt &context,
443  unsigned unwind);
444 
445  virtual void loop_bound_exceeded(statet &state, const exprt &guard);
446 
449  virtual void no_body(const irep_idt &identifier)
450  {
451  }
452 
460  virtual void symex_function_call(
462  statet &state,
463  const goto_programt::instructiont &instruction);
464 
470  virtual void locality(
471  const irep_idt &function_identifier,
473  const goto_functionst::goto_functiont &goto_function);
474 
477  virtual void symex_end_of_function(statet &);
478 
486  virtual void symex_function_call_symbol(
488  statet &state,
489  const exprt &lhs,
490  const symbol_exprt &function,
491  const exprt::operandst &arguments);
492 
505  virtual void symex_function_call_post_clean(
507  statet &state,
508  const exprt &cleaned_lhs,
509  const symbol_exprt &function,
510  const exprt::operandst &cleaned_arguments);
511 
512  virtual bool get_unwind_recursion(
513  const irep_idt &identifier,
514  unsigned thread_nr,
515  unsigned unwind);
516 
524  const irep_idt &function_identifier,
525  const goto_functionst::goto_functiont &goto_function,
526  statet &state,
527  const exprt::operandst &arguments);
528 
529  // exceptions
532  void symex_throw(statet &state);
535  void symex_catch(statet &state);
536 
537  virtual void do_simplify(exprt &expr);
538 
544  void symex_assign(statet &state, const exprt &lhs, const exprt &rhs);
545 
555  statet &state,
557  const exprt &lhs,
558  const exprt &rhs);
559 
567  statet &state,
569  const function_application_exprt &f_l1);
570 
580  statet &state,
582  const function_application_exprt &f_l1);
583 
593  statet &state,
595  const function_application_exprt &f_l1);
596 
606  statet &state,
608  const function_application_exprt &f_l1);
609 
619  statet &state,
621  const function_application_exprt &f_l1);
622 
632  statet &state,
634  const function_application_exprt &f_l1);
635 
650  statet &state,
652  const function_application_exprt &f_l1);
653 
663  statet &state,
665  const function_application_exprt &f_l1);
666 
669  statet &state,
671  const function_application_exprt &f_l1);
672 
675  statet &state,
677  const function_application_exprt &f_l1,
678  bool to_upper);
679 
682  statet &state,
684  const function_application_exprt &f_l1);
685 
707  statet &state,
709  const ssa_exprt &length,
710  const constant_exprt &new_length,
711  const ssa_exprt &char_array,
712  const array_exprt &new_char_array);
713 
723  statet &state,
725  const std::string &aux_symbol_name,
726  const ssa_exprt &char_array,
727  const array_exprt &new_char_array);
728 
740  statet &state,
742  const array_exprt &new_char_array,
743  const address_of_exprt &string_data);
744 
745  std::optional<std::reference_wrapper<const array_exprt>>
746  try_evaluate_constant_string(const statet &state, const exprt &content);
747 
748  // clang-format off
749  static std::optional<std::reference_wrapper<const constant_exprt>>
751  const statet &state,
752  const exprt &expr);
753  // clang-format on
754 
755  // havocs the given object
756  void havoc_rec(statet &state, const guardt &guard, const exprt &dest);
757 
759 
765  void lift_lets(statet &, exprt &);
766 
771  void lift_let(statet &state, const let_exprt &let_expr);
772 
773  virtual void
774  symex_va_start(statet &, const exprt &lhs, const side_effect_exprt &);
775 
781  virtual void symex_allocate(
782  statet &state,
783  const exprt &lhs,
784  const side_effect_exprt &code);
788  virtual void symex_cpp_delete(statet &state, const codet &code);
794  virtual void
795  symex_cpp_new(statet &state, const exprt &lhs, const side_effect_exprt &code);
796 
800  virtual void symex_printf(statet &state, const exprt &rhs);
804  virtual void symex_input(statet &state, const codet &code);
808  virtual void symex_output(statet &state, const codet &code);
809 
810  void rewrite_quantifiers(exprt &, statet &);
811 
817 
818 public:
828  std::size_t path_segment_vccs;
829 
830 protected:
838 
841 
843 
846 
847 public:
848  unsigned get_total_vccs() const
849  {
850  INVARIANT(
851  _total_vccs != std::numeric_limits<unsigned>::max(),
852  "symex_threaded_step should have been executed at least once before "
853  "attempting to read total_vccs");
854  return _total_vccs;
855  }
856 
857  unsigned get_remaining_vccs() const
858  {
859  INVARIANT(
860  _remaining_vccs != std::numeric_limits<unsigned>::max(),
861  "symex_threaded_step should have been executed at least once before "
862  "attempting to read remaining_vccs");
863  return _remaining_vccs;
864  }
865 
866  void validate(const validation_modet vm) const
867  {
868  target.validate(ns, vm);
869  }
870 };
871 
879 
880 void symex_transition(
883  bool is_backwards_goto);
884 
896  renamedt<exprt, L2> condition,
897  const value_sett &value_set,
898  const irep_idt &language_mode,
899  const namespacet &ns);
900 
901 #endif // CPROVER_GOTO_SYMEX_GOTO_SYMEX_H
static exprt guard(const exprt::operandst &guards, exprt cond)
Abstract interface to eager or lazy GOTO models.
Operator to return the address of an object.
Definition: pointer_expr.h:540
Array constructor from list of elements.
Definition: std_expr.h:1616
Data structure for representing an arbitrary statement in a program.
Definition: std_code_base.h:29
Symex complexity module.
A constant literal expression.
Definition: std_expr.h:2987
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:38
Base class for all expressions.
Definition: expr.h:56
std::vector< exprt > operandst
Definition: expr.h:58
Application of (mathematical) function.
::goto_functiont goto_functiont
This class represents an instruction in the GOTO intermediate representation.
Definition: goto_program.h:181
instructionst::const_iterator const_targett
Definition: goto_program.h:615
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
virtual bool should_stop_unwind(const symex_targett::sourcet &source, const call_stackt &context, unsigned unwind)
Determine whether to unwind a loop.
Definition: symex_goto.cpp:959
void try_filter_value_sets(goto_symex_statet &state, exprt condition, const value_sett &original_value_set, value_sett *jump_taken_value_set, value_sett *jump_not_taken_value_set, const namespacet &ns)
Try to filter value sets based on whether possible values of a pointer-typed symbol make the conditio...
Definition: symex_main.cpp:782
virtual symbol_tablet symex_with_state(statet &state, const get_goto_functiont &get_goto_functions)
Symbolically execute the entire program starting from entry point.
Definition: symex_main.cpp:325
void rewrite_quantifiers(exprt &, statet &)
Definition: symex_main.cpp:253
virtual void symex_function_call_symbol(const get_goto_functiont &get_goto_function, statet &state, const exprt &lhs, const symbol_exprt &function, const exprt::operandst &arguments)
Symbolic execution of a call to a function call.
void apply_goto_condition(goto_symex_statet &current_state, goto_statet &jump_taken_state, goto_statet &jump_not_taken_state, const exprt &original_guard, const exprt &new_guard, const namespacet &ns)
Propagate constants and points-to information implied by a GOTO condition.
Definition: symex_goto.cpp:30
virtual void symex_assume(statet &state, const exprt &cond)
Symbolically execute an ASSUME instruction or simulate such an execution for a synthetic assumption.
Definition: symex_main.cpp:201
void symex_threaded_step(statet &state, const get_goto_functiont &get_goto_function)
Invokes symex_step and verifies whether additional threads can be executed.
Definition: symex_main.cpp:301
virtual bool check_break(const irep_idt &loop_id, unsigned unwind)
Defines condition for interrupting symbolic execution for a specific loop.
Definition: symex_goto.cpp:617
void symex_unreachable_goto(statet &state)
Symbolically execute a GOTO instruction in the context of unreachable code.
Definition: symex_goto.cpp:544
complexity_limitert complexity_module
Definition: goto_symex.h:842
goto_symex_statet statet
A type abbreviation for goto_symex_statet.
Definition: goto_symex.h:40
virtual void symex_atomic_begin(statet &state)
Symbolically execute an ATOMIC_BEGIN instruction.
const symbol_table_baset & outer_symbol_table
The symbol table associated with the goto-program being executed.
Definition: goto_symex.h:249
irep_idt language_mode
language_mode: ID_java, ID_C or another language identifier if we know the source language in use,...
Definition: goto_symex.h:241
void symex_set_return_value(statet &state, const exprt &return_value)
Symbolically execute a SET_RETURN_VALUE instruction.
virtual void no_body(const irep_idt &identifier)
Log a warning that a function has no body.
Definition: goto_symex.h:449
virtual void symex_input(statet &state, const codet &code)
Symbolically execute an OTHER instruction that does a CPP input.
bool ignore_assertions
If this flag is set to true then assertions will be temporarily ignored by the symbolic executions.
Definition: goto_symex.h:171
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 ...
Definition: symex_main.cpp:494
virtual void symex_step(const get_goto_functiont &get_goto_function, statet &state)
Called for each step in the symbolic execution This calls print_symex_step to print symex's current i...
Definition: symex_main.cpp:593
bool constant_propagate_delete_char_at(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate deleting a character from a string.
Definition: goto_symex.cpp:650
bool constant_propagate_set_char_at(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate setting the char at the given index.
Definition: goto_symex.cpp:898
bool constant_propagate_assignment_with_side_effects(statet &state, symex_assignt &symex_assign, const exprt &lhs, const exprt &rhs)
Attempt to constant propagate side effects of the assignment (if any)
Definition: goto_symex.cpp:184
void lift_let(statet &state, const let_exprt &let_expr)
Execute a single let expression, which should not have any nested let expressions (use lift_lets inst...
virtual void symex_goto(statet &state)
Symbolically execute a GOTO instruction.
Definition: symex_goto.cpp:230
unsigned get_remaining_vccs() const
Definition: goto_symex.h:857
virtual void symex_decl(statet &state)
Symbolically execute a DECL instruction.
Definition: symex_decl.cpp:18
void symex_catch(statet &state)
Symbolically execute a CATCH instruction.
Definition: symex_catch.cpp:14
bool constant_propagate_delete(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate deleting a substring from a string.
Definition: goto_symex.cpp:723
static std::optional< std::reference_wrapper< const constant_exprt > > try_evaluate_constant(const statet &state, const exprt &expr)
Definition: goto_symex.cpp:387
void phi_function(const goto_statet &goto_state, statet &dest_state)
Merge the SSA assignments from goto_state into dest_state.
Definition: symex_goto.cpp:859
path_storaget & path_storage
Symbolic execution paths to be resumed later.
Definition: goto_symex.h:816
std::unique_ptr< statet > initialize_entry_point_state(const get_goto_functiont &get_goto_function)
Initialize the symbolic execution and the given state with the beginning of the entry point function.
Definition: symex_main.cpp:399
void havoc_rec(statet &state, const guardt &guard, const exprt &dest)
Definition: symex_other.cpp:20
void constant_propagate_empty_string(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Create an empty string constant.
Definition: goto_symex.cpp:406
unsigned _total_vccs
Definition: goto_symex.h:839
symex_target_equationt & target
The equation that this execution is building up.
Definition: goto_symex.h:266
virtual bool get_unwind_recursion(const irep_idt &identifier, unsigned thread_nr, unsigned unwind)
virtual void symex_cpp_delete(statet &state, const codet &code)
Symbolically execute an OTHER instruction that does a CPP delete
bool constant_propagate_case_change(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1, bool to_upper)
Attempt to constant propagate case changes, both upper and lower.
Definition: goto_symex.cpp:968
virtual void symex_allocate(statet &state, const exprt &lhs, const side_effect_exprt &code)
Symbolically execute an assignment instruction that has an allocate on the right hand side.
bool constant_propagate_integer_to_string(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate converting an integer to a string.
Definition: goto_symex.cpp:571
guard_managert & guard_manager
Used to create guards.
Definition: goto_symex.h:263
goto_symext(message_handlert &mh, const symbol_table_baset &outer_symbol_table, symex_target_equationt &_target, const optionst &options, path_storaget &path_storage, guard_managert &guard_manager)
Construct a goto_symext to execute a particular program.
Definition: goto_symex.h:51
unsigned atomic_section_counter
A monotonically increasing index for each encountered ATOMIC_BEGIN instruction.
Definition: goto_symex.h:270
virtual symbol_tablet resume_symex_from_saved_state(const get_goto_functiont &get_goto_function, const statet &saved_state, symex_target_equationt *saved_equation)
Performs symbolic execution using a state and equation that have already been used to symbolically ex...
Definition: symex_main.cpp:381
void symex_assert(const goto_programt::instructiont &, statet &)
Definition: symex_main.cpp:153
exprt clean_expr(exprt expr, statet &state, bool write)
Clean up an expression.
unsigned get_total_vccs() const
Definition: goto_symex.h:848
virtual void loop_bound_exceeded(statet &state, const exprt &guard)
Definition: symex_goto.cpp:926
bool constant_propagate_trim(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate trim operations.
virtual void symex_dead(statet &state)
Symbolically execute a DEAD instruction.
Definition: symex_dead.cpp:16
shadow_memoryt shadow_memory
Shadow memory instrumentation API.
Definition: goto_symex.h:845
std::size_t path_segment_vccs
Number of VCCs generated during the run of this goto_symext object.
Definition: goto_symex.h:828
virtual void symex_start_thread(statet &state)
Symbolically execute a START_THREAD instruction.
void initialize_auto_object(const exprt &, statet &)
virtual symbol_tablet symex_from_entry_point_of(const get_goto_functiont &get_goto_function, const shadow_memory_field_definitionst &fields)
Symbolically execute the entire program starting from entry point.
Definition: symex_main.cpp:466
void parameter_assignments(const irep_idt &function_identifier, const goto_functionst::goto_functiont &goto_function, statet &state, const exprt::operandst &arguments)
Iterates over arguments and assigns them to the parameters, which are symbols whose name and type are...
virtual void symex_va_start(statet &, const exprt &lhs, const side_effect_exprt &)
namespacet ns
Initialized just before symbolic execution begins, to point to both outer_symbol_table and the symbol...
Definition: goto_symex.h:258
void trigger_auto_object(const exprt &, statet &)
void lift_lets(statet &, exprt &)
Execute any let expressions in expr using symex_assignt::assign_symbol.
virtual void vcc(const exprt &cond, const irep_idt &property_id, const std::string &msg, statet &state)
Symbolically execute a verification condition (assertion).
Definition: symex_main.cpp:182
void kill_instruction_local_symbols(statet &state)
Kills any variables in instruction_local_symbols (these are currently always let-bound variables defi...
Definition: symex_main.cpp:746
virtual void merge_goto(const symex_targett::sourcet &source, goto_statet &&goto_state, statet &state)
Merge a single branch, the symbolic state of which is held in goto_state, into the current overall sy...
Definition: symex_goto.cpp:678
virtual void symex_end_of_function(statet &)
Symbolically execute a END_FUNCTION instruction.
void symex_assign(statet &state, const exprt &lhs, const exprt &rhs)
Symbolically execute an ASSIGN instruction or simulate such an execution for a synthetic assignment.
Definition: goto_symex.cpp:38
exprt make_auto_object(const typet &, statet &)
void print_symex_step(statet &state)
Prints the route of symex as it walks through the code.
Definition: symex_main.cpp:511
virtual void symex_printf(statet &state, const exprt &rhs)
Symbolically execute an OTHER instruction that does a CPP printf
virtual void symex_output(statet &state, const codet &code)
Symbolically execute an OTHER instruction that does a CPP output.
void symex_throw(statet &state)
Symbolically execute a THROW instruction.
Definition: symex_throw.cpp:14
exprt address_arithmetic(const exprt &, statet &, bool keep_array)
Transforms an lvalue expression by replacing any dereference operations it contains with explicit ref...
const symbolt & get_new_string_data_symbol(statet &state, symex_assignt &symex_assign, const std::string &aux_symbol_name, const ssa_exprt &char_array, const array_exprt &new_char_array)
Installs a new symbol in the symbol table to represent the given character array, and assigns the cha...
Definition: goto_symex.cpp:302
void associate_array_to_pointer(statet &state, symex_assignt &symex_assign, const array_exprt &new_char_array, const address_of_exprt &string_data)
Generate array to pointer association primitive.
Definition: goto_symex.cpp:338
virtual void do_simplify(exprt &expr)
Definition: goto_symex.cpp:32
unsigned _remaining_vccs
Definition: goto_symex.h:839
virtual void symex_other(statet &state)
Symbolically execute an OTHER instruction.
Definition: symex_other.cpp:79
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
virtual void symex_function_call_post_clean(const get_goto_functiont &get_goto_function, statet &state, const exprt &cleaned_lhs, const symbol_exprt &function, const exprt::operandst &cleaned_arguments)
Symbolic execution of a function call by inlining.
virtual void symex_cpp_new(statet &state, const exprt &lhs, const side_effect_exprt &code)
Handles side effects of type 'new' for C++ and 'new array' for C++ and Java language modes.
bool constant_propagate_set_length(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate setting the length of a string.
Definition: goto_symex.cpp:817
symbol_exprt cache_dereference(exprt &dereference_result, statet &state)
messaget log
The messaget to write log messages to.
Definition: goto_symex.h:278
const symex_configt symex_config
The configuration to use for this symbolic execution.
Definition: goto_symex.h:185
bool should_pause_symex
Set when states are pushed onto the workqueue If this flag is set at the end of a symbolic execution ...
Definition: goto_symex.h:167
virtual void dereference(exprt &, statet &, bool write)
Replace all dereference operations within expr with explicit references to the objects they may refer...
bool constant_propagate_string_substring(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate getting a substring of a string.
Definition: goto_symex.cpp:484
void symex_assume_l2(statet &, const exprt &cond)
Definition: symex_main.cpp:221
void merge_gotos(statet &state)
Merge all branches joining at the current program point.
Definition: symex_goto.cpp:623
symex_targett::assignment_typet assignment_typet
Definition: goto_symex.h:758
virtual void locality(const irep_idt &function_identifier, goto_symext::statet &state, const goto_functionst::goto_functiont &goto_function)
Preserves locality of parameters of a given function by applying L1 renaming to them.
virtual ~goto_symext()=default
A virtual destructor allowing derived classes to be cleaned up correctly.
bool constant_propagate_replace(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant proagate character replacement.
messaget::mstreamt & print_callstack_entry(const symex_targett::sourcet &target)
Definition: symex_main.cpp:503
void dereference_rec(exprt &expr, statet &state, bool write, bool is_in_quantifier)
If expr is a dereference_exprt, replace it with explicit references to the objects it may point to.
std::vector< symbol_exprt > instruction_local_symbols
Variables that should be killed at the end of the current symex_step invocation.
Definition: goto_symex.h:275
void validate(const validation_modet vm) const
Definition: goto_symex.h:866
bool constant_propagate_string_concat(statet &state, symex_assignt &symex_assign, const function_application_exprt &f_l1)
Attempt to constant propagate string concatenation.
Definition: goto_symex.cpp:434
virtual void symex_atomic_end(statet &state)
Symbolically execute an ATOMIC_END instruction.
virtual void symex_function_call(const get_goto_functiont &get_goto_function, statet &state, const goto_programt::instructiont &instruction)
Symbolically execute a FUNCTION_CALL instruction.
void assign_string_constant(statet &state, symex_assignt &symex_assign, const ssa_exprt &length, const constant_exprt &new_length, const ssa_exprt &char_array, const array_exprt &new_char_array)
Assign constant string length and string data given by a char array to given ssa variables.
Definition: goto_symex.cpp:258
void process_array_expr(statet &, exprt &)
Given an expression, find the root object and the offset into it.
std::optional< std::reference_wrapper< const array_exprt > > try_evaluate_constant_string(const statet &state, const exprt &content)
Definition: goto_symex.cpp:366
void execute_next_instruction(const get_goto_functiont &get_goto_function, statet &state)
Executes the instruction state.source.pc Case-switches over the type of the instruction being execute...
Definition: symex_main.cpp:603
virtual void initialize_path_storage_from_entry_point_of(const get_goto_functiont &get_goto_function, symbol_table_baset &new_symbol_table, const shadow_memory_field_definitionst &fields)
Puts the initial state of the entry point function into the path storage.
Definition: symex_main.cpp:477
A let expression.
Definition: std_expr.h:3196
Class that provides messages with a built-in verbosity 'level'.
Definition: message.h:155
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:94
Storage for symbolic execution paths to be resumed later.
Definition: path_storage.h:38
Wrapper for expressions or types which have been renamed up to a given level.
Definition: renamed.h:33
The shadow memory field definitions.
The shadow memory instrumentation performed during symbolic execution.
Definition: shadow_memory.h:37
An expression containing a side effect.
Definition: std_code.h:1450
Expression providing an SSA-renamed symbol of expressions.
Definition: ssa_expr.h:17
Expression to hold a symbol (variable)
Definition: std_expr.h:131
The symbol table base class interface.
The symbol table.
Definition: symbol_table.h:14
Symbol table entry.
Definition: symbol.h:28
Functor for symex assignment.
Definition: symex_assign.h:28
Callback object that goto_symext::dereference_rec provides to value_set_dereferencet to provide value...
Inheriting the interface of symex_targett this class represents the SSA form of the input program as ...
void validate(const namespacet &ns, const validation_modet vm) const
The type of an expression, extends irept.
Definition: type.h:29
State type in value_set_domaint, used in value-set analysis and goto-symex.
Definition: value_set.h:44
Symbolic Execution.
renamedt< exprt, L2 > try_evaluate_pointer_comparisons(renamedt< exprt, L2 > condition, const value_sett &value_set, const irep_idt &language_mode, const namespacet &ns)
Try to evaluate pointer comparisons where they can be trivially determined using the value-set.
Definition: symex_goto.cpp:214
void symex_transition(goto_symext::statet &state)
Transition to the next instruction, which increments the internal program counter and initializes the...
Definition: symex_main.cpp:146
Symex Shadow Memory Instrumentation.
This is unused by this implementation of guards, but can be used by other implementations of the same...
Definition: guard_expr.h:20
Configuration used for a symbolic execution.
Definition: symex_config.h:19
Identifies source in the context of symbolic execution.
Definition: symex_target.h:37
Symbolic Execution.
Generate Equation using Symbolic Execution.
unsigned int statet
ssize_t write(int fildes, const void *buf, size_t nbyte)
Definition: unistd.c:195
validation_modet