CBMC
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 "contracts.h"
18 
20 {
21 public:
23  code_contractst &_parent,
24  messaget _log,
25  const irep_idt _fun_id)
26  : parent(_parent), log(_log), fun_id(_fun_id)
27  {
28  }
29 
30  void update_requires(goto_programt &requires);
31  void update_ensures(goto_programt &ensures);
32 
33  virtual void create_declarations() = 0;
34 
35  void add_memory_map_decl(goto_programt &program);
36  void add_memory_map_dead(goto_programt &program);
37 
38 protected:
39  void add_declarations(const std::string &decl_string);
40  void update_fn_call(
41  goto_programt::targett &target,
42  const std::string &name,
43  bool add_address_of);
44 
45  virtual void create_requires_fn_call(goto_programt::targett &target) = 0;
46  virtual void create_ensures_fn_call(goto_programt::targett &target) = 0;
47 
51 
52  // written by the child classes.
53  std::string memmap_name;
54  std::string requires_fn_name;
55  std::string ensures_fn_name;
57 
59 };
60 
62 {
63 public:
65  code_contractst &_parent,
66  messaget _log,
67  const irep_idt _fun_id);
68 
69  virtual void create_declarations();
70 
71 protected:
72  virtual void create_requires_fn_call(goto_programt::targett &target);
73  virtual void create_ensures_fn_call(goto_programt::targett &target);
74 };
75 
77 {
78 public:
80  code_contractst &_parent,
81  messaget _log,
82  const irep_idt _fun_id);
83 
84  virtual void create_declarations();
85 
86 protected:
87  virtual void create_requires_fn_call(goto_programt::targett &target);
88  virtual void create_ensures_fn_call(goto_programt::targett &target);
89 };
90 
94 {
95 public:
97  {
98  }
99 
100  // \brief return the set of functions invoked by
101  // the call graph of this program.
102  std::set<goto_programt::targett> &is_fresh_calls();
103  void clear_set();
104  void operator()(goto_programt &prog);
105 
106 protected:
107  std::set<goto_programt::targett> function_set;
108 };
109 
114 {
115 public:
118  messaget &log)
120  {
121  }
122 
123  // \brief return the set of functions invoked by
124  // the call graph of this program.
125  std::set<irep_idt> &function_calls();
126  void operator()(const goto_programt &prog);
127 
128 protected:
131  std::set<irep_idt> function_set;
132 };
133 
135 {
136 public:
138  {
139  }
140 
141  void operator()(const exprt &exp) override
142  {
143  }
144 };
145 
146 #endif // CPROVER_GOTO_INSTRUMENT_CONTRACTS_MEMORY_PREDICATES_H
messaget
Class that provides messages with a built-in verbosity 'level'.
Definition: message.h:154
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
is_fresh_enforcet
Definition: memory_predicates.h:61
is_fresh_baset::add_declarations
void add_declarations(const std::string &decl_string)
Definition: memory_predicates.cpp:164
is_fresh_baset::requires_fn_name
std::string requires_fn_name
Definition: memory_predicates.h:54
is_fresh_baset::ensures_fn_name
std::string ensures_fn_name
Definition: memory_predicates.h:55
function_binding_visitort::operator()
void operator()(const exprt &exp) override
Definition: memory_predicates.h:141
is_fresh_replacet::is_fresh_replacet
is_fresh_replacet(code_contractst &_parent, messaget _log, const irep_idt _fun_id)
Definition: memory_predicates.cpp:328
find_is_fresh_calls_visitort::find_is_fresh_calls_visitort
find_is_fresh_calls_visitort()
Definition: memory_predicates.h:96
function_binding_visitort::function_binding_visitort
function_binding_visitort()
Definition: memory_predicates.h:137
is_fresh_replacet::create_ensures_fn_call
virtual void create_ensures_fn_call(goto_programt::targett &target)
Definition: memory_predicates.cpp:400
is_fresh_enforcet::create_requires_fn_call
virtual void create_requires_fn_call(goto_programt::targett &target)
Definition: memory_predicates.cpp:318
is_fresh_baset::get_memmap_type
array_typet get_memmap_type()
Definition: memory_predicates.cpp:138
functions_in_scope_visitort::function_calls
std::set< irep_idt > & function_calls()
Definition: memory_predicates.cpp:31
functions_in_scope_visitort::operator()
void operator()(const goto_programt &prog)
Definition: memory_predicates.cpp:36
exprt
Base class for all expressions.
Definition: expr.h:55
find_is_fresh_calls_visitort::operator()
void operator()(goto_programt &prog)
Definition: memory_predicates.cpp:91
is_fresh_baset::create_declarations
virtual void create_declarations()=0
is_fresh_baset::update_ensures
void update_ensures(goto_programt &ensures)
Definition: memory_predicates.cpp:122
is_fresh_baset::parent
code_contractst & parent
Definition: memory_predicates.h:48
is_fresh_baset::log
messaget log
Definition: memory_predicates.h:49
is_fresh_replacet::create_requires_fn_call
virtual void create_requires_fn_call(goto_programt::targett &target)
Definition: memory_predicates.cpp:395
functions_in_scope_visitort::function_set
std::set< irep_idt > function_set
Definition: memory_predicates.h:131
is_fresh_replacet
Definition: memory_predicates.h:76
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:225
is_fresh_enforcet::create_ensures_fn_call
virtual void create_ensures_fn_call(goto_programt::targett &target)
Definition: memory_predicates.cpp:323
find_is_fresh_calls_visitort::function_set
std::set< goto_programt::targett > function_set
Definition: memory_predicates.h:107
is_fresh_baset::fun_id
irep_idt fun_id
Definition: memory_predicates.h:50
function_binding_visitort
Definition: memory_predicates.h:134
code_contractst
Definition: contracts.h:55
const_expr_visitort
Definition: expr.h:353
is_fresh_baset::add_memory_map_dead
void add_memory_map_dead(goto_programt &program)
Definition: memory_predicates.cpp:156
functions_in_scope_visitort::log
messaget & log
Definition: memory_predicates.h:130
is_fresh_baset::memmap_symbol
symbolt memmap_symbol
Definition: memory_predicates.h:56
is_fresh_baset::create_ensures_fn_call
virtual void create_ensures_fn_call(goto_programt::targett &target)=0
is_fresh_baset
Definition: memory_predicates.h:19
find_is_fresh_calls_visitort
Predicate to be used with the exprt::visit() function.
Definition: memory_predicates.h:93
find_is_fresh_calls_visitort::is_fresh_calls
std::set< goto_programt::targett > & is_fresh_calls()
Definition: memory_predicates.cpp:81
contracts.h
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:24
array_typet
Arrays with given size.
Definition: std_types.h:762
functions_in_scope_visitort::functions_in_scope_visitort
functions_in_scope_visitort(const goto_functionst &goto_functions, messaget &log)
Definition: memory_predicates.h:116
is_fresh_enforcet::is_fresh_enforcet
is_fresh_enforcet(code_contractst &_parent, messaget _log, const irep_idt _fun_id)
Definition: memory_predicates.cpp:249
symbolt
Symbol table entry.
Definition: symbol.h:27
is_fresh_baset::memmap_name
std::string memmap_name
Definition: memory_predicates.h:53
is_fresh_baset::create_requires_fn_call
virtual void create_requires_fn_call(goto_programt::targett &target)=0
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition: goto_program.h:72
is_fresh_enforcet::create_declarations
virtual void create_declarations()
Definition: memory_predicates.cpp:275
is_fresh_baset::is_fresh_baset
is_fresh_baset(code_contractst &_parent, messaget _log, const irep_idt _fun_id)
Definition: memory_predicates.h:22
is_fresh_replacet::create_declarations
virtual void create_declarations()
Definition: memory_predicates.cpp:354
find_is_fresh_calls_visitort::clear_set
void clear_set()
Definition: memory_predicates.cpp:86
goto_programt::targett
instructionst::iterator targett
Definition: goto_program.h:586
functions_in_scope_visitort
Predicate to be used with the exprt::visit() function.
Definition: memory_predicates.h:113
is_fresh_baset::update_requires
void update_requires(goto_programt &requires)
Definition: memory_predicates.cpp:112
is_fresh_baset::add_memory_map_decl
void add_memory_map_decl(goto_programt &program)
Definition: memory_predicates.cpp:143
functions_in_scope_visitort::goto_functions
const goto_functionst & goto_functions
Definition: memory_predicates.h:129