cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
dfcc_lift_memory_predicates.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Dynamic frame condition checking for function contracts
4
5
Author: Remi Delmas, delmasrd@amazon.com
6
Date: November 2022
7
8
\*******************************************************************/
9
18
19
#ifndef CPROVER_GOTO_INSTRUMENT_CONTRACTS_DYNAMIC_FRAMES_DFCC_LIFT_MEMORY_PREDICATES_H
20
#define CPROVER_GOTO_INSTRUMENT_CONTRACTS_DYNAMIC_FRAMES_DFCC_LIFT_MEMORY_PREDICATES_H
21
22
#include <
util/message.h
>
23
24
#include <
goto-programs/goto_program.h
>
25
26
#include <map>
27
#include <set>
28
29
class
dfcc_libraryt
;
30
class
dfcc_instrumentt
;
31
class
message_handlert
;
32
class
goto_modelt
;
33
class
replace_symbolt
;
34
35
class
dfcc_lift_memory_predicatest
36
{
37
public
:
42
dfcc_lift_memory_predicatest
(
43
goto_modelt
&
goto_model
,
44
dfcc_libraryt
&
library
,
45
dfcc_instrumentt
&
instrument
,
46
message_handlert
&message_handler);
47
52
std::set<irep_idt>
53
lift_predicates
(std::set<irep_idt> &discovered_function_pointer_contracts);
54
57
void
fix_calls
(
goto_programt
&program);
58
62
void
fix_calls
(
63
goto_programt
&program,
64
goto_programt::targett
first_instruction,
65
const
goto_programt::targett
&last_instruction);
66
67
protected
:
68
goto_modelt
&
goto_model
;
69
dfcc_libraryt
&
library
;
70
dfcc_instrumentt
&
instrument
;
71
messaget
log
;
72
// index of lifted parameters for lifted functions
73
std::map<irep_idt, std::set<std::size_t>>
lifted_parameters
;
74
77
bool
calls_memory_predicates
(
78
const
goto_programt
&goto_program,
79
const
std::set<irep_idt> &predicates);
80
81
void
lift_predicate
(
82
const
irep_idt
&function_id,
83
std::set<irep_idt> &discovered_function_pointer_contracts);
84
85
void
lift_parameters_and_update_body
(
86
const
irep_idt
&function_id,
87
std::set<irep_idt> &discovered_function_pointer_contracts);
88
95
void
add_pointer_type
(
96
const
irep_idt
&function_id,
97
const
std::size_t parameter_rank,
98
replace_symbolt
&replace_lifted_param);
99
102
void
collect_parameters_to_lift
(
const
irep_idt
&function_id);
103
105
bool
is_lifted_function
(
const
irep_idt
&function_id);
106
};
107
108
#endif
dfcc_instrumentt
This class instruments GOTO functions or instruction sequences for frame condition checking and loop ...
Definition
dfcc_instrument.h:44
dfcc_libraryt
Class interface to library types and functions defined in cprover_contracts.c.
Definition
dfcc_library.h:163
dfcc_lift_memory_predicatest::instrument
dfcc_instrumentt & instrument
Definition
dfcc_lift_memory_predicates.h:70
dfcc_lift_memory_predicatest::fix_calls
void fix_calls(goto_programt &program)
Fixes calls to user-defined memory predicates in the given program, by adding an address-of to argume...
Definition
dfcc_lift_memory_predicates.cpp:407
dfcc_lift_memory_predicatest::goto_model
goto_modelt & goto_model
Definition
dfcc_lift_memory_predicates.h:68
dfcc_lift_memory_predicatest::collect_parameters_to_lift
void collect_parameters_to_lift(const irep_idt &function_id)
Computes the subset of function parameters of function_id that are passed directly to core predicates...
Definition
dfcc_lift_memory_predicates.cpp:217
dfcc_lift_memory_predicatest::lift_predicate
void lift_predicate(const irep_idt &function_id, std::set< irep_idt > &discovered_function_pointer_contracts)
Definition
dfcc_lift_memory_predicates.cpp:375
dfcc_lift_memory_predicatest::log
messaget log
Definition
dfcc_lift_memory_predicates.h:71
dfcc_lift_memory_predicatest::add_pointer_type
void add_pointer_type(const irep_idt &function_id, const std::size_t parameter_rank, replace_symbolt &replace_lifted_param)
adds a pointer_type to the parameter of a function
Definition
dfcc_lift_memory_predicates.cpp:289
dfcc_lift_memory_predicatest::library
dfcc_libraryt & library
Definition
dfcc_lift_memory_predicates.h:69
dfcc_lift_memory_predicatest::dfcc_lift_memory_predicatest
dfcc_lift_memory_predicatest(goto_modelt &goto_model, dfcc_libraryt &library, dfcc_instrumentt &instrument, message_handlert &message_handler)
Definition
dfcc_lift_memory_predicates.cpp:29
dfcc_lift_memory_predicatest::lifted_parameters
std::map< irep_idt, std::set< std::size_t > > lifted_parameters
Definition
dfcc_lift_memory_predicates.h:73
dfcc_lift_memory_predicatest::lift_parameters_and_update_body
void lift_parameters_and_update_body(const irep_idt &function_id, std::set< irep_idt > &discovered_function_pointer_contracts)
Definition
dfcc_lift_memory_predicates.cpp:330
dfcc_lift_memory_predicatest::calls_memory_predicates
bool calls_memory_predicates(const goto_programt &goto_program, const std::set< irep_idt > &predicates)
Returns true iff goto_program calls core memory predicates.
Definition
dfcc_lift_memory_predicates.cpp:57
dfcc_lift_memory_predicatest::is_lifted_function
bool is_lifted_function(const irep_idt &function_id)
True if a function at least had one of its parameters lifted.
Definition
dfcc_lift_memory_predicates.cpp:42
dfcc_lift_memory_predicatest::lift_predicates
std::set< irep_idt > lift_predicates(std::set< irep_idt > &discovered_function_pointer_contracts)
Collects and lifts all user-defined memory predicates.
Definition
dfcc_lift_memory_predicates.cpp:81
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
message_handlert
Definition
message.h:27
messaget
Class that provides messages with a built-in verbosity 'level'.
Definition
message.h:154
replace_symbolt
Replace a symbol expression by a given expression.
Definition
replace_symbol.h:28
goto_program.h
Concrete Goto Program.
message.h
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
goto-instrument
contracts
dynamic-frames
dfcc_lift_memory_predicates.h
Generated by
1.17.0