cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
dfcc_is_fresh.cpp
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: August 2022
7
8
\*******************************************************************/
9
10
#include "
dfcc_is_fresh.h
"
11
12
#include <
util/cprover_prefix.h
>
13
#include <
util/pointer_expr.h
>
14
#include <
util/prefix.h
>
15
#include <
util/suffix.h
>
16
#include <
util/symbol.h
>
17
18
#include "
dfcc_cfg_info.h
"
19
#include "
dfcc_library.h
"
20
21
dfcc_is_fresht::dfcc_is_fresht
(
22
dfcc_libraryt
&
library
,
23
message_handlert
&
message_handler
)
24
:
library
(
library
),
message_handler
(
message_handler
),
log
(
message_handler
)
25
{
26
}
27
28
void
dfcc_is_fresht::rewrite_calls
(
29
goto_programt
&program,
30
dfcc_cfg_infot
&cfg_info)
31
{
32
rewrite_calls
(
33
program,
34
program.
instructions
.begin(),
35
program.
instructions
.end(),
36
cfg_info);
37
}
38
39
void
dfcc_is_fresht::rewrite_calls
(
40
goto_programt
&program,
41
goto_programt::targett
first_instruction,
42
const
goto_programt::targett
&last_instruction,
43
dfcc_cfg_infot
&cfg_info)
44
{
45
auto
&target = first_instruction;
46
while
(target != last_instruction)
47
{
48
if
(target->is_function_call())
49
{
50
const
auto
&function = target->call_function();
51
52
if
(function.id() == ID_symbol)
53
{
54
const
irep_idt
&fun_name =
to_symbol_expr
(function).
get_identifier
();
55
if
(
has_prefix
(
id2string
(fun_name),
CPROVER_PREFIX
"is_fresh"
))
56
{
57
// add address on first operand
58
target->call_arguments()[0] =
59
address_of_exprt
(target->call_arguments()[0]);
60
61
// fix the function name.
62
to_symbol_expr
(target->call_function())
63
.
set_identifier
(
library
.dfcc_fun_symbol[
dfcc_funt::IS_FRESH
].name);
64
65
// pass the may_fail flag
66
if
(function.source_location().get_bool(
"no_fail"
))
67
target->call_arguments().push_back(
false_exprt
());
68
else
69
target->call_arguments().push_back(
true_exprt
());
70
71
// pass the write_set
72
target->call_arguments().push_back(cfg_info.
get_write_set
(target));
73
}
74
}
75
}
76
target++;
77
}
78
}
address_of_exprt
Operator to return the address of an object.
Definition
pointer_expr.h:540
dfcc_cfg_infot
Computes natural loops, enforces normal form conditions, computes the nesting graph,...
Definition
dfcc_cfg_info.h:243
dfcc_cfg_infot::get_write_set
const exprt & get_write_set(goto_programt::const_targett target) const
Returns the write set variable to use for the given instruction Returns the write set for the loop,...
Definition
dfcc_cfg_info.cpp:662
dfcc_is_fresht::message_handler
message_handlert & message_handler
Definition
dfcc_is_fresh.h:53
dfcc_is_fresht::library
dfcc_libraryt & library
Definition
dfcc_is_fresh.h:52
dfcc_is_fresht::rewrite_calls
void rewrite_calls(goto_programt &program, dfcc_cfg_infot &cfg_info)
Rewrites calls to is_fresh predicates into calls to the library implementation in the given program,...
Definition
dfcc_is_fresh.cpp:28
dfcc_is_fresht::dfcc_is_fresht
dfcc_is_fresht(dfcc_libraryt &library, message_handlert &message_handler)
Definition
dfcc_is_fresh.cpp:21
dfcc_is_fresht::log
messaget log
Definition
dfcc_is_fresh.h:54
dfcc_libraryt
Class interface to library types and functions defined in cprover_contracts.c.
Definition
dfcc_library.h:163
false_exprt
The Boolean constant false.
Definition
std_expr.h:3125
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition
goto_program.h:72
goto_programt::instructions
instructionst instructions
The list of instructions in the goto program.
Definition
goto_program.h:621
goto_programt::targett
instructionst::iterator targett
Definition
goto_program.h:613
message_handlert
Definition
message.h:27
symbol_exprt::set_identifier
void set_identifier(const irep_idt &identifier)
Definition
std_expr.h:156
symbol_exprt::get_identifier
const irep_idt & get_identifier() const
Definition
std_expr.h:161
true_exprt
The Boolean constant true.
Definition
std_expr.h:3116
has_prefix
bool has_prefix(const std::string &s, const std::string &prefix)
Definition
converter.cpp:13
cprover_prefix.h
CPROVER_PREFIX
#define CPROVER_PREFIX
Definition
cprover_prefix.h:14
dfcc_cfg_info.h
Class that computes CFG information about the loop structure of a GOTO function for the purpose of dy...
dfcc_is_fresh.h
Instruments occurrences of is_fresh predicates in programs encoding requires and ensures clauses of c...
dfcc_library.h
Dynamic frame condition checking library loading.
dfcc_funt::IS_FRESH
@ IS_FRESH
Definition
dfcc_library.h:139
id2string
const std::string & id2string(const irep_idt &d)
Definition
irep.h:44
pointer_expr.h
API to expression classes for Pointers.
prefix.h
to_symbol_expr
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
Definition
std_expr.h:211
suffix.h
symbol.h
Symbol table entry.
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
goto-instrument
contracts
dynamic-frames
dfcc_is_fresh.cpp
Generated by
1.17.0