CBMC
Loading...
Searching...
No Matches
allocate_objects.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module:
4
5Author: Daniel Kroening, kroening@kroening.com
6
7\*******************************************************************/
8
9#ifndef CPROVER_UTIL_ALLOCATE_OBJECTS_H
10#define CPROVER_UTIL_ALLOCATE_OBJECTS_H
11
12#include <util/namespace.h>
13#include <util/std_code.h>
14
16enum class lifetimet
17{
24};
25
27{
28public:
41
43 code_blockt &assignments,
44 const exprt &target_expr,
45 const typet &allocate_type,
46 const lifetimet lifetime,
47 const irep_idt &basename_prefix = "tmp");
48
50 code_blockt &assignments,
51 const exprt &target_expr,
52 const typet &allocate_type,
53 const irep_idt &basename_prefix = "tmp");
54
56 code_blockt &assignments,
57 const exprt &target_expr,
58 const typet &allocate_type,
59 const irep_idt &basename_prefix = "tmp");
60
78 const exprt &target_expr,
79 const typet &allocate_type);
80
86 const exprt &target_expr,
87 const typet &allocate_type);
88
90 const typet &allocate_type,
91 const irep_idt &basename_prefix = "tmp");
92
93 void add_created_symbol(const symbolt &symbol);
94
96
98
99private:
103
106
107 std::vector<irep_idt> symbols_created;
108
110 code_blockt &assignments,
111 const exprt &target_expr,
112 const typet &allocate_type,
113 const bool static_lifetime,
115};
116
122make_allocate_code(const symbol_exprt &lhs, const exprt &size);
123
124#endif // CPROVER_UTIL_ALLOCATE_OBJECTS_H
code_frontend_assignt make_allocate_code(const symbol_exprt &lhs, const exprt &size)
Create code allocating an object of size size and assigning it to lhs
lifetimet
Selects the kind of objects allocated.
@ DYNAMIC
Allocate dynamic objects (using ALLOCATE)
@ STATIC_GLOBAL
Allocate global objects with static lifetime.
@ AUTOMATIC_LOCAL
Allocate local objects with automatic lifetime.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
void add_created_symbol(const symbolt &symbol)
Add a pointer to a symbol to the list of pointers to symbols created so far.
exprt allocate_non_dynamic_object(code_blockt &assignments, const exprt &target_expr, const typet &allocate_type, const bool static_lifetime, const irep_idt &basename_prefix)
allocate_objectst(const irep_idt &symbol_mode, const source_locationt &source_location, const irep_idt &name_prefix, symbol_table_baset &symbol_table)
const namespacet ns
const irep_idt symbol_mode
std::vector< irep_idt > symbols_created
const irep_idt name_prefix
exprt allocate_object(code_blockt &assignments, const exprt &target_expr, const typet &allocate_type, const lifetimet lifetime, const irep_idt &basename_prefix="tmp")
Allocates a new object, either by creating a local variable with automatic lifetime,...
symbol_table_baset & symbol_table
const source_locationt source_location
exprt allocate_dynamic_object_symbol(code_blockt &output_code, const exprt &target_expr, const typet &allocate_type)
Generates code for allocating a dynamic object.
exprt allocate_dynamic_object(code_blockt &output_code, const exprt &target_expr, const typet &allocate_type)
Generate the same code as allocate_dynamic_object_symbol, but return a dereference_exprt that derefer...
exprt allocate_static_global_object(code_blockt &assignments, const exprt &target_expr, const typet &allocate_type, const irep_idt &basename_prefix="tmp")
Creates a global variable with static lifetime.
void mark_created_symbols_as_input(code_blockt &init_code)
Adds code to mark the created symbols as input.
exprt allocate_automatic_local_object(code_blockt &assignments, const exprt &target_expr, const typet &allocate_type, const irep_idt &basename_prefix="tmp")
Creates a local variable with automatic lifetime.
void declare_created_symbols(code_blockt &init_code)
Adds declarations for all non-static symbols created.
A codet representing sequential composition of program statements.
Definition std_code.h:130
A codet representing an assignment in the program.
Definition std_code.h:24
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
Base class for all expressions.
Definition expr.h:56
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Definition namespace.h:91
Expression to hold a symbol (variable)
Definition std_expr.h:131
The symbol table base class interface.
Symbol table entry.
Definition symbol.h:28
The type of an expression, extends irept.
Definition type.h:29