CBMC
field_sensitivity.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Field-sensitive SSA
4 
5 Author: Michael Tautschnig
6 
7 \*******************************************************************/
8 
9 #ifndef CPROVER_GOTO_SYMEX_FIELD_SENSITIVITY_H
10 #define CPROVER_GOTO_SYMEX_FIELD_SENSITIVITY_H
11 
12 #include <cstddef>
13 
14 #include <util/nodiscard.h>
15 
16 class exprt;
17 class ssa_exprt;
18 class namespacet;
19 class goto_symex_statet;
20 class symex_targett;
21 
83 {
84 public:
88  field_sensitivityt(std::size_t max_array_size, bool should_simplify)
89  : max_field_sensitivity_array_size(max_array_size),
91  {
92  }
93 
105  void field_assignments(
106  const namespacet &ns,
107  goto_symex_statet &state,
108  const ssa_exprt &lhs,
109  const exprt &rhs,
110  symex_targett &target,
111  bool allow_pointer_unsoundness);
112 
126  NODISCARD
127  exprt
128  apply(const namespacet &ns, goto_symex_statet &state, exprt expr, bool write)
129  const;
131  exprt apply(
132  const namespacet &ns,
133  goto_symex_statet &state,
134  ssa_exprt expr,
135  bool write) const;
136 
146  const namespacet &ns,
147  goto_symex_statet &state,
148  const ssa_exprt &ssa_expr) const;
149 
157  bool is_divisible(const ssa_exprt &expr) const;
158 
159 private:
161  bool run_apply = true;
162 
164 
165  const bool should_simplify;
166 
168  const namespacet &ns,
169  goto_symex_statet &state,
170  const exprt &lhs_fs,
171  const exprt &ssa_rhs,
172  symex_targett &target,
173  bool allow_pointer_unsoundness);
174 
175  exprt simplify_opt(exprt e, const namespacet &ns) const;
176 };
177 
178 #endif // CPROVER_GOTO_SYMEX_FIELD_SENSITIVITY_H
NODISCARD
#define NODISCARD
Definition: nodiscard.h:22
goto_symex_statet
Central data structure: state.
Definition: goto_symex_state.h:41
field_sensitivityt::should_simplify
const bool should_simplify
Definition: field_sensitivity.h:165
nodiscard.h
exprt
Base class for all expressions.
Definition: expr.h:55
field_sensitivityt
Control granularity of object accesses.
Definition: field_sensitivity.h:82
field_sensitivityt::apply
exprt apply(const namespacet &ns, goto_symex_statet &state, exprt expr, bool write) const
Turn an expression expr into a field-sensitive SSA expression.
Definition: field_sensitivity.cpp:32
field_sensitivityt::max_field_sensitivity_array_size
const std::size_t max_field_sensitivity_array_size
Definition: field_sensitivity.h:163
field_sensitivityt::run_apply
bool run_apply
whether or not to invoke field_sensitivityt::apply
Definition: field_sensitivity.h:161
ssa_exprt
Expression providing an SSA-renamed symbol of expressions.
Definition: ssa_expr.h:16
namespacet
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition: namespace.h:90
field_sensitivityt::is_divisible
bool is_divisible(const ssa_exprt &expr) const
Determine whether expr would translate to an atomic SSA expression (returns false) or a composite obj...
Definition: field_sensitivity.cpp:353
field_sensitivityt::field_assignments
void field_assignments(const namespacet &ns, goto_symex_statet &state, const ssa_exprt &lhs, const exprt &rhs, symex_targett &target, bool allow_pointer_unsoundness)
Assign to the individual fields of a non-expanded symbol lhs.
Definition: field_sensitivity.cpp:228
field_sensitivityt::field_sensitivityt
field_sensitivityt(std::size_t max_array_size, bool should_simplify)
Definition: field_sensitivity.h:88
field_sensitivityt::get_fields
exprt get_fields(const namespacet &ns, goto_symex_statet &state, const ssa_exprt &ssa_expr) const
Compute an expression representing the individual components of a field-sensitive SSA representation ...
Definition: field_sensitivity.cpp:157
field_sensitivityt::simplify_opt
exprt simplify_opt(exprt e, const namespacet &ns) const
Definition: field_sensitivity.cpp:372
field_sensitivityt::field_assignments_rec
void field_assignments_rec(const namespacet &ns, goto_symex_statet &state, const exprt &lhs_fs, const exprt &ssa_rhs, symex_targett &target, bool allow_pointer_unsoundness)
Assign to the individual fields lhs_fs of a non-expanded symbol lhs.
Definition: field_sensitivity.cpp:258
symex_targett
The interface of the target container for symbolic execution to record its symbolic steps into.
Definition: symex_target.h:24