CBMC
Loading...
Searching...
No Matches
cover_instrument_decision.cpp
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: Coverage Instrumentation
4
5Author: Daniel Kroening
6
7\*******************************************************************/
8
11
12#include "cover_instrument.h"
13
15
16#include "cover_util.h"
17
19 const irep_idt &function_id,
20 goto_programt &goto_program,
22 const cover_blocks_baset &,
23 const assertion_factoryt &make_assertion) const
24{
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}
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:562
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.
bool is_non_cover_assertion(goto_programt::const_targett t) const
void initialize_source_location(source_locationt &source_location, const std::string &comment, const irep_idt &function_id) const
std::function< goto_programt::instructiont(const exprt &, const source_locationt &)> assertion_factoryt
The type of function used to make goto_program assertions.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition dstring.h:38
A generic container class for the GOTO intermediate representation of one function.
void insert_before_swap(targett target)
Insertion that preserves jumps to "target".
instructionst::iterator targett
Boolean negation.
Definition std_expr.h:2454
Coverage Instrumentation.
std::set< exprt > collect_decisions(const goto_programt::const_targett t)
Coverage Instrumentation Utilities.
std::string from_expr(const namespacet &ns, const irep_idt &identifier, const exprt &expr)