cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
memory_predicates.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Predicates to specify memory footprint in function contracts.
4
5
Author: Felipe R. Monteiro
6
7
Date: July 2021
8
9
\*******************************************************************/
10
13
14
#ifndef CPROVER_GOTO_INSTRUMENT_CONTRACTS_MEMORY_PREDICATES_H
15
#define CPROVER_GOTO_INSTRUMENT_CONTRACTS_MEMORY_PREDICATES_H
16
17
#include <
util/symbol.h
>
18
19
#include <
goto-programs/goto_program.h
>
20
21
class
goto_functionst
;
22
class
goto_modelt
;
23
class
message_handlert
;
24
25
class
is_fresh_baset
26
{
27
public
:
28
is_fresh_baset
(
29
goto_modelt
&
goto_model
,
30
message_handlert
&
message_handler
,
31
const
irep_idt
&_fun_id)
32
:
goto_model
(
goto_model
),
message_handler
(
message_handler
),
fun_id
(_fun_id)
33
{
34
}
35
36
void
update_requires
(
goto_programt
&requires_);
37
void
update_ensures
(
goto_programt
&ensures);
38
39
virtual
void
create_declarations
() = 0;
40
41
void
add_memory_map_decl
(
goto_programt
&program);
42
void
add_memory_map_dead
(
goto_programt
&program);
43
44
protected
:
45
void
add_declarations
(
const
std::string &decl_string);
46
void
update_fn_call
(
47
goto_programt::targett
&target,
48
const
std::string &name,
49
bool
add_address_of);
50
51
virtual
void
create_requires_fn_call
(
goto_programt::targett
&target) = 0;
52
virtual
void
create_ensures_fn_call
(
goto_programt::targett
&target) = 0;
53
54
goto_modelt
&
goto_model
;
55
message_handlert
&
message_handler
;
56
const
irep_idt
&
fun_id
;
57
58
// written by the child classes.
59
std::string
memmap_name
;
60
std::string
requires_fn_name
;
61
std::string
ensures_fn_name
;
62
symbolt
memmap_symbol
;
63
64
array_typet
get_memmap_type
();
65
};
66
67
class
is_fresh_enforcet
:
public
is_fresh_baset
68
{
69
public
:
70
is_fresh_enforcet
(
71
goto_modelt
&
goto_model
,
72
message_handlert
&
message_handler
,
73
const
irep_idt
&_fun_id);
74
75
virtual
void
create_declarations
();
76
77
protected
:
78
virtual
void
create_requires_fn_call
(
goto_programt::targett
&target);
79
virtual
void
create_ensures_fn_call
(
goto_programt::targett
&target);
80
};
81
82
class
is_fresh_replacet
:
public
is_fresh_baset
83
{
84
public
:
85
is_fresh_replacet
(
86
goto_modelt
&
goto_model
,
87
message_handlert
&
message_handler
,
88
const
irep_idt
&_fun_id);
89
90
virtual
void
create_declarations
();
91
92
protected
:
93
virtual
void
create_requires_fn_call
(
goto_programt::targett
&target);
94
virtual
void
create_ensures_fn_call
(
goto_programt::targett
&target);
95
};
96
99
class
find_is_fresh_calls_visitort
100
{
101
public
:
102
find_is_fresh_calls_visitort
()
103
{
104
}
105
106
// \brief return the set of functions invoked by
107
// the call graph of this program.
108
std::set<goto_programt::targett, goto_programt::target_less_than> &
109
is_fresh_calls
();
110
void
clear_set
();
111
void
operator()
(
goto_programt
&prog);
112
113
protected
:
114
std::set<goto_programt::targett, goto_programt::target_less_than>
115
function_set
;
116
};
117
121
class
functions_in_scope_visitort
122
{
123
public
:
124
functions_in_scope_visitort
(
125
const
goto_functionst
&
goto_functions
,
126
message_handlert
&
message_handler
)
127
:
goto_functions
(
goto_functions
),
message_handler
(
message_handler
)
128
{
129
}
130
131
// \brief return the set of functions invoked by
132
// the call graph of this program.
133
std::set<irep_idt> &
function_calls
();
134
void
operator()
(
const
goto_programt
&prog);
135
136
protected
:
137
const
goto_functionst
&
goto_functions
;
138
message_handlert
&
message_handler
;
139
std::set<irep_idt>
function_set
;
140
};
141
142
class
function_binding_visitort
:
const_expr_visitort
143
{
144
public
:
145
function_binding_visitort
() :
const_expr_visitort
()
146
{
147
}
148
149
void
operator()
(
const
exprt
&exp)
override
150
{
151
}
152
};
153
154
#endif
// CPROVER_GOTO_INSTRUMENT_CONTRACTS_MEMORY_PREDICATES_H
array_typet
Arrays with given size.
Definition
std_types.h:807
const_expr_visitort
Definition
expr.h:380
exprt
Base class for all expressions.
Definition
expr.h:57
find_is_fresh_calls_visitort::clear_set
void clear_set()
Definition
memory_predicates.cpp:87
find_is_fresh_calls_visitort::operator()
void operator()(goto_programt &prog)
Definition
memory_predicates.cpp:92
find_is_fresh_calls_visitort::is_fresh_calls
std::set< goto_programt::targett, goto_programt::target_less_than > & is_fresh_calls()
Definition
memory_predicates.cpp:82
find_is_fresh_calls_visitort::function_set
std::set< goto_programt::targett, goto_programt::target_less_than > function_set
Definition
memory_predicates.h:115
find_is_fresh_calls_visitort::find_is_fresh_calls_visitort
find_is_fresh_calls_visitort()
Definition
memory_predicates.h:102
function_binding_visitort::operator()
void operator()(const exprt &exp) override
Definition
memory_predicates.h:149
function_binding_visitort::function_binding_visitort
function_binding_visitort()
Definition
memory_predicates.h:145
functions_in_scope_visitort::operator()
void operator()(const goto_programt &prog)
Definition
memory_predicates.cpp:34
functions_in_scope_visitort::goto_functions
const goto_functionst & goto_functions
Definition
memory_predicates.h:137
functions_in_scope_visitort::function_calls
std::set< irep_idt > & function_calls()
Definition
memory_predicates.cpp:29
functions_in_scope_visitort::function_set
std::set< irep_idt > function_set
Definition
memory_predicates.h:139
functions_in_scope_visitort::functions_in_scope_visitort
functions_in_scope_visitort(const goto_functionst &goto_functions, message_handlert &message_handler)
Definition
memory_predicates.h:124
functions_in_scope_visitort::message_handler
message_handlert & message_handler
Definition
memory_predicates.h:138
goto_functionst
A collection of goto functions.
Definition
goto_functions.h:25
goto_modelt
Definition
goto_model.h:27
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition
goto_program.h:72
goto_programt::targett
instructionst::iterator targett
Definition
goto_program.h:613
is_fresh_baset::create_ensures_fn_call
virtual void create_ensures_fn_call(goto_programt::targett &target)=0
is_fresh_baset::fun_id
const irep_idt & fun_id
Definition
memory_predicates.h:56
is_fresh_baset::update_fn_call
void update_fn_call(goto_programt::targett &target, const std::string &name, bool add_address_of)
Definition
memory_predicates.cpp:218
is_fresh_baset::ensures_fn_name
std::string ensures_fn_name
Definition
memory_predicates.h:61
is_fresh_baset::message_handler
message_handlert & message_handler
Definition
memory_predicates.h:55
is_fresh_baset::requires_fn_name
std::string requires_fn_name
Definition
memory_predicates.h:60
is_fresh_baset::add_memory_map_decl
void add_memory_map_decl(goto_programt &program)
Definition
memory_predicates.cpp:144
is_fresh_baset::update_requires
void update_requires(goto_programt &requires_)
Definition
memory_predicates.cpp:113
is_fresh_baset::add_memory_map_dead
void add_memory_map_dead(goto_programt &program)
Definition
memory_predicates.cpp:158
is_fresh_baset::create_declarations
virtual void create_declarations()=0
is_fresh_baset::get_memmap_type
array_typet get_memmap_type()
Definition
memory_predicates.cpp:139
is_fresh_baset::goto_model
goto_modelt & goto_model
Definition
memory_predicates.h:54
is_fresh_baset::add_declarations
void add_declarations(const std::string &decl_string)
Definition
memory_predicates.cpp:166
is_fresh_baset::memmap_name
std::string memmap_name
Definition
memory_predicates.h:59
is_fresh_baset::memmap_symbol
symbolt memmap_symbol
Definition
memory_predicates.h:62
is_fresh_baset::is_fresh_baset
is_fresh_baset(goto_modelt &goto_model, message_handlert &message_handler, const irep_idt &_fun_id)
Definition
memory_predicates.h:28
is_fresh_baset::update_ensures
void update_ensures(goto_programt &ensures)
Definition
memory_predicates.cpp:123
is_fresh_baset::create_requires_fn_call
virtual void create_requires_fn_call(goto_programt::targett &target)=0
is_fresh_enforcet::is_fresh_enforcet
is_fresh_enforcet(goto_modelt &goto_model, message_handlert &message_handler, const irep_idt &_fun_id)
Definition
memory_predicates.cpp:242
is_fresh_enforcet::create_ensures_fn_call
virtual void create_ensures_fn_call(goto_programt::targett &target)
Definition
memory_predicates.cpp:316
is_fresh_enforcet::create_requires_fn_call
virtual void create_requires_fn_call(goto_programt::targett &target)
Definition
memory_predicates.cpp:311
is_fresh_enforcet::create_declarations
virtual void create_declarations()
Definition
memory_predicates.cpp:268
is_fresh_replacet::is_fresh_replacet
is_fresh_replacet(goto_modelt &goto_model, message_handlert &message_handler, const irep_idt &_fun_id)
Definition
memory_predicates.cpp:321
is_fresh_replacet::create_ensures_fn_call
virtual void create_ensures_fn_call(goto_programt::targett &target)
Definition
memory_predicates.cpp:394
is_fresh_replacet::create_declarations
virtual void create_declarations()
Definition
memory_predicates.cpp:347
is_fresh_replacet::create_requires_fn_call
virtual void create_requires_fn_call(goto_programt::targett &target)
Definition
memory_predicates.cpp:389
message_handlert
Definition
message.h:27
symbolt
Symbol table entry.
Definition
symbol.h:28
goto_program.h
Concrete Goto Program.
symbol.h
Symbol table entry.
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
goto-instrument
contracts
memory_predicates.h
Generated by
1.17.0