CBMC
symex_dereference_state.cpp
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Symbolic Execution of ANSI-C
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
13 
14 #include <util/symbol_table.h>
15 
30 const symbolt *
32 {
33  if(is_ssa_expr(expr))
34  {
35  const ssa_exprt &ssa_expr=to_ssa_expr(expr);
36  if(ssa_expr.get_original_expr().id()!=ID_symbol)
37  return nullptr;
38 
39  const symbolt &ptr_symbol=
40  ns.lookup(to_ssa_expr(expr).get_object_name());
41 
42  const irep_idt &failed_symbol = ptr_symbol.type.get(ID_C_failed_symbol);
43 
44  const symbolt *symbol;
45  if(!failed_symbol.empty() && !ns.lookup(failed_symbol, symbol))
46  {
47  symbolt sym=*symbol;
48  symbolt *sym_ptr=nullptr;
49  const ssa_exprt sym_expr =
50  state.rename_ssa<L1>(ssa_exprt{sym.symbol_expr()}, ns).get();
51  sym.name = sym_expr.get_identifier();
52  state.symbol_table.move(sym, sym_ptr);
53  return sym_ptr;
54  }
55  }
56  else if(expr.id()==ID_symbol)
57  {
58  const symbolt &ptr_symbol=
60 
61  const irep_idt &failed_symbol = ptr_symbol.type.get(ID_C_failed_symbol);
62 
63  const symbolt *symbol;
64  if(!failed_symbol.empty() && !ns.lookup(failed_symbol, symbol))
65  {
66  symbolt sym=*symbol;
67  symbolt *sym_ptr=nullptr;
68  const ssa_exprt sym_expr =
69  state.rename_ssa<L1>(ssa_exprt{sym.symbol_expr()}, ns).get();
70  sym.name = sym_expr.get_identifier();
71  state.symbol_table.move(sym, sym_ptr);
72  return sym_ptr;
73  }
74  }
75 
76  return nullptr;
77 }
78 
80 std::vector<exprt>
82 {
83  return state.value_set.get_value_set(expr, ns);
84 }
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
symex_dereference_statet::state
goto_symext::statet & state
Definition: symex_dereference_state.h:34
L1
@ L1
Definition: renamed.h:24
symbolt::type
typet type
Type of symbol.
Definition: symbol.h:31
symex_dereference_statet::get_or_create_failed_symbol
const symbolt * get_or_create_failed_symbol(const exprt &expr) override
Get or create a failed symbol for the given pointer-typed expression.
Definition: symex_dereference_state.cpp:31
exprt
Base class for all expressions.
Definition: expr.h:55
symex_dereference_state.h
ssa_exprt::get_original_expr
const exprt & get_original_expr() const
Definition: ssa_expr.h:33
irept::get
const irep_idt & get(const irep_idt &name) const
Definition: irep.cpp:45
ssa_exprt
Expression providing an SSA-renamed symbol of expressions.
Definition: ssa_expr.h:16
namespacet::lookup
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
Definition: namespace.cpp:138
is_ssa_expr
bool is_ssa_expr(const exprt &expr)
Definition: ssa_expr.h:125
to_ssa_expr
const ssa_exprt & to_ssa_expr(const exprt &expr)
Cast a generic exprt to an ssa_exprt.
Definition: ssa_expr.h:145
goto_symex_statet::symbol_table
symbol_tablet symbol_table
contains symbols that are minted during symbolic execution, such as dynamically created objects etc.
Definition: goto_symex_state.h:66
value_sett::get_value_set
std::vector< exprt > get_value_set(exprt expr, const namespacet &ns) const
Gets values pointed to by expr, including following dereference operators (i.e.
Definition: value_set.cpp:355
get_identifier
static optionalt< smt_termt > get_identifier(const exprt &expr, const std::unordered_map< exprt, smt_identifier_termt, irep_hash > &expression_handle_identifiers, const std::unordered_map< exprt, smt_identifier_termt, irep_hash > &expression_identifiers)
Definition: smt2_incremental_decision_procedure.cpp:328
symbol_exprt::get_identifier
const irep_idt & get_identifier() const
Definition: std_expr.h:142
symex_dereference_statet::ns
const namespacet & ns
Definition: symex_dereference_state.h:35
symbolt::symbol_expr
class symbol_exprt symbol_expr() const
Produces a symbol_exprt for a symbol.
Definition: symbol.cpp:121
to_symbol_expr
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
Definition: std_expr.h:222
irept::id
const irep_idt & id() const
Definition: irep.h:396
dstringt::empty
bool empty() const
Definition: dstring.h:88
goto_symex_statet::rename_ssa
renamedt< ssa_exprt, level > rename_ssa(ssa_exprt ssa, const namespacet &ns)
Version of rename which is specialized for SSA exprt.
Definition: goto_symex_state.cpp:150
symbol_tablet::move
virtual bool move(symbolt &symbol, symbolt *&new_symbol) override
Move a symbol into the symbol table.
Definition: symbol_table.cpp:67
symbolt
Symbol table entry.
Definition: symbol.h:27
symbol_table.h
Author: Diffblue Ltd.
symex_dereference_statet::get_value_set
std::vector< exprt > get_value_set(const exprt &expr) const override
Just forwards a value-set query to state.value_set
Definition: symex_dereference_state.cpp:81
goto_statet::value_set
value_sett value_set
Uses level 1 names, and is used to do dereferencing.
Definition: goto_state.h:51
symbolt::name
irep_idt name
The unique identifier.
Definition: symbol.h:40