cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
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
12
#include "
symex_dereference_state.h
"
13
28
const
symbolt
*
29
symex_dereference_statet::get_or_create_failed_symbol
(
const
exprt
&expr)
30
{
31
if
(
is_ssa_expr
(expr))
32
{
33
const
ssa_exprt
&ssa_expr=
to_ssa_expr
(expr);
34
if
(ssa_expr.
get_original_expr
().
id
()!=ID_symbol)
35
return
nullptr
;
36
37
const
symbolt
&ptr_symbol=
38
ns
.lookup(
to_ssa_expr
(expr).get_object_name());
39
40
const
irep_idt
&failed_symbol = ptr_symbol.
type
.
get
(ID_C_failed_symbol);
41
42
const
symbolt
*symbol;
43
if
(!failed_symbol.
empty
() && !
ns
.lookup(failed_symbol, symbol))
44
{
45
symbolt
sym=*symbol;
46
symbolt
*sym_ptr=
nullptr
;
47
const
ssa_exprt
sym_expr =
48
state
.rename_ssa<
L1
>(
ssa_exprt
{sym.
symbol_expr
()},
ns
).get();
49
sym.
name
= sym_expr.
get_identifier
();
50
state
.symbol_table.move(sym, sym_ptr);
51
return
sym_ptr;
52
}
53
}
54
else
if
(expr.
id
()==ID_symbol)
55
{
56
const
symbolt
&ptr_symbol=
57
ns
.lookup(
to_symbol_expr
(expr).get_identifier());
58
59
const
irep_idt
&failed_symbol = ptr_symbol.
type
.
get
(ID_C_failed_symbol);
60
61
const
symbolt
*symbol;
62
if
(!failed_symbol.
empty
() && !
ns
.lookup(failed_symbol, symbol))
63
{
64
symbolt
sym=*symbol;
65
symbolt
*sym_ptr=
nullptr
;
66
const
ssa_exprt
sym_expr =
67
state
.rename_ssa<
L1
>(
ssa_exprt
{sym.
symbol_expr
()},
ns
).get();
68
sym.
name
= sym_expr.
get_identifier
();
69
state
.symbol_table.move(sym, sym_ptr);
70
return
sym_ptr;
71
}
72
}
73
74
return
nullptr
;
75
}
76
78
std::vector<exprt>
79
symex_dereference_statet::get_value_set
(
const
exprt
&expr)
const
80
{
81
return
state
.value_set.get_value_set(expr,
ns
);
82
}
dstringt::empty
bool empty() const
Definition
dstring.h:89
exprt
Base class for all expressions.
Definition
expr.h:57
irept::get
const irep_idt & get(const irep_idt &name) const
Definition
irep.cpp:44
irept::id
const irep_idt & id() const
Definition
irep.h:388
ssa_exprt
Expression providing an SSA-renamed symbol of expressions.
Definition
ssa_expr.h:17
ssa_exprt::get_original_expr
const exprt & get_original_expr() const
Definition
ssa_expr.h:33
symbol_exprt::get_identifier
const irep_idt & get_identifier() const
Definition
std_expr.h:161
symbolt
Symbol table entry.
Definition
symbol.h:28
symbolt::symbol_expr
class symbol_exprt symbol_expr() const
Produces a symbol_exprt for a symbol.
Definition
symbol.cpp:121
symbolt::type
typet type
Type of symbol.
Definition
symbol.h:31
symbolt::name
irep_idt name
The unique identifier.
Definition
symbol.h:40
symex_dereference_statet::ns
const namespacet & ns
Definition
symex_dereference_state.h:35
symex_dereference_statet::state
goto_symext::statet & state
Definition
symex_dereference_state.h:34
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:79
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:29
L1
@ L1
Definition
renamed.h:24
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
to_symbol_expr
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
Definition
std_expr.h:211
symex_dereference_state.h
Symbolic Execution of ANSI-C.
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
goto-symex
symex_dereference_state.cpp
Generated by
1.17.0