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.
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 =
ns
.lookup(
to_symbol_expr
(expr).identifier());
57
58
const
irep_idt
&failed_symbol = ptr_symbol.
type
.
get
(ID_C_failed_symbol);
59
60
const
symbolt
*symbol;
61
if
(!failed_symbol.
empty
() && !
ns
.lookup(failed_symbol, symbol))
62
{
63
symbolt
sym=*symbol;
64
symbolt
*sym_ptr=
nullptr
;
65
const
ssa_exprt
sym_expr =
66
state
.rename_ssa<
L1
>(
ssa_exprt
{sym.
symbol_expr
()},
ns
).get();
67
sym.
name
= sym_expr.
identifier
();
68
state
.symbol_table.move(sym, sym_ptr);
69
return
sym_ptr;
70
}
71
}
72
73
return
nullptr
;
74
}
75
77
std::vector<exprt>
78
symex_dereference_statet::get_value_set
(
const
exprt
&expr)
const
79
{
80
return
state
.value_set.get_value_set(expr,
ns
);
81
}
dstringt::empty
bool empty() const
Definition
dstring.h:101
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::identifier
void identifier(const irep_idt &identifier)
Definition
std_expr.h:160
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:78
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:221
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