cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
cover_instrument_decision.cpp
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Coverage Instrumentation
4
5
Author: Daniel Kroening
6
7
\*******************************************************************/
8
11
12
#include "
cover_instrument.h
"
13
14
#include <
langapi/language_util.h
>
15
16
#include "
cover_util.h
"
17
18
void
cover_decision_instrumentert::instrument
(
19
const
irep_idt
&function_id,
20
goto_programt
&goto_program,
21
goto_programt::targett
&i_it,
22
const
cover_blocks_baset
&,
23
const
assertion_factoryt
&make_assertion)
const
24
{
25
if
(
is_non_cover_assertion
(i_it))
26
i_it->turn_into_skip();
27
28
// Decisions are maximal Boolean combinations of conditions.
29
if
(!i_it->source_location().is_built_in())
30
{
31
const
std::set<exprt> decisions =
collect_decisions
(i_it);
32
33
source_locationt
source_location = i_it->source_location();
34
35
for
(
const
auto
&d : decisions)
36
{
37
const
std::string d_string =
from_expr
(
ns
, function_id, d);
38
39
const
std::string comment_t =
"decision '"
+ d_string +
"' true"
;
40
goto_program.
insert_before_swap
(i_it);
41
initialize_source_location
(source_location, comment_t, function_id);
42
*i_it = make_assertion(d, source_location);
43
44
const
std::string comment_f =
"decision '"
+ d_string +
"' false"
;
45
goto_program.
insert_before_swap
(i_it);
46
initialize_source_location
(source_location, comment_f, function_id);
47
*i_it = make_assertion(
not_exprt
(d), source_location);
48
}
49
50
// advance iterator beyond the inserted instructions
51
for
(std::size_t i = 0; i < decisions.size() * 2; i++)
52
i_it++;
53
}
54
}
cover_blocks_baset
Definition
cover_basic_blocks.h:22
cover_decision_instrumentert::instrument
void instrument(const irep_idt &function_id, goto_programt &, goto_programt::targett &, const cover_blocks_baset &, const assertion_factoryt &) const override
Override this method to implement an instrumenter.
Definition
cover_instrument_decision.cpp:18
cover_instrumenter_baset::ns
const namespacet ns
Definition
cover_instrument.h:72
cover_instrumenter_baset::is_non_cover_assertion
bool is_non_cover_assertion(goto_programt::const_targett t) const
Definition
cover_instrument.h:94
cover_instrumenter_baset::initialize_source_location
void initialize_source_location(source_locationt &source_location, const std::string &comment, const irep_idt &function_id) const
Definition
cover_instrument.h:83
cover_instrumenter_baset::assertion_factoryt
std::function< goto_programt::instructiont(const exprt &, const source_locationt &)> assertion_factoryt
The type of function used to make goto_program assertions.
Definition
cover_instrument.h:41
goto_programt
A generic container class for the GOTO intermediate representation of one function.
Definition
goto_program.h:72
goto_programt::insert_before_swap
void insert_before_swap(targett target)
Insertion that preserves jumps to "target".
Definition
goto_program.h:642
goto_programt::targett
instructionst::iterator targett
Definition
goto_program.h:613
not_exprt
Boolean negation.
Definition
std_expr.h:2378
source_locationt
Definition
source_location.h:20
cover_instrument.h
Coverage Instrumentation.
collect_decisions
std::set< exprt > collect_decisions(const goto_programt::const_targett t)
Definition
cover_util.cpp:98
cover_util.h
Coverage Instrumentation Utilities.
from_expr
std::string from_expr(const namespacet &ns, const irep_idt &identifier, const exprt &expr)
Definition
language_util.cpp:39
language_util.h
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
goto-instrument
cover_instrument_decision.cpp
Generated by
1.17.0