CBMC
reachability_slicer_class.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Goto Program Slicing
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_GOTO_INSTRUMENT_REACHABILITY_SLICER_CLASS_H
13 #define CPROVER_GOTO_INSTRUMENT_REACHABILITY_SLICER_CLASS_H
14 
16 
17 class goto_functionst;
18 class message_handlert;
19 class slicing_criteriont;
20 
22 {
23 public:
24  void operator()(
25  goto_functionst &goto_functions,
26  const slicing_criteriont &criterion,
27  bool include_forward_reachability,
29 
30 protected:
32  {
34  {
35  }
36 
40  };
41 
42  bool is_same_target(
45 
48 
49  typedef std::stack<cfgt::entryt> queuet;
50 
55  {
58 
67 
70  {
71  }
72  };
73 
75  const is_threadedt &is_threaded,
76  const slicing_criteriont &criterion);
77 
79  const is_threadedt &is_threaded,
80  const slicing_criteriont &criterion);
81 
82  void slice(goto_functionst &goto_functions);
83 
84 private:
85  std::vector<cfgt::node_indext>
86  backward_outwards_walk_from(std::vector<cfgt::node_indext>);
87 
88  void backward_inwards_walk_from(std::vector<cfgt::node_indext>);
89 
90  std::vector<cfgt::node_indext>
91  forward_outwards_walk_from(std::vector<cfgt::node_indext>);
92 
93  void forward_inwards_walk_from(std::vector<cfgt::node_indext>);
94 
96  const cfgt::nodet &call_node,
97  std::vector<cfgt::node_indext> &callsite_successor_stack,
98  std::vector<cfgt::node_indext> &callee_head_stack);
99 
100  std::vector<cfgt::node_indext> get_sources(
101  const is_threadedt &is_threaded,
102  const slicing_criteriont &criterion);
103 };
104 
105 #endif // CPROVER_GOTO_INSTRUMENT_REACHABILITY_SLICER_CLASS_H
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:36
reachability_slicert
Definition: reachability_slicer_class.h:21
reachability_slicert::backward_inwards_walk_from
void backward_inwards_walk_from(std::vector< cfgt::node_indext >)
Perform backward depth-first search of the control-flow graph of the goto program,...
Definition: reachability_slicer.cpp:155
reachability_slicert::search_stack_entryt::node_index
cfgt::node_indext node_index
CFG node to mark reachable.
Definition: reachability_slicer_class.h:57
reachability_slicert::cfgt
cfg_baset< slicer_entryt > cfgt
Definition: reachability_slicer_class.h:46
slicing_criteriont
Definition: full_slicer.h:35
reachability_slicert::slicer_entryt::reachable_from_assertion
bool reachable_from_assertion
Definition: reachability_slicer_class.h:39
reachability_slicert::is_same_target
bool is_same_target(goto_programt::const_targett it1, goto_programt::const_targett it2) const
Definition: reachability_slicer.cpp:87
reachability_slicert::slice
void slice(goto_functionst &goto_functions)
This function removes all instructions that have the flag reaches_assertion or reachable_from_asserti...
Definition: reachability_slicer.cpp:360
reachability_slicert::forward_walk_call_instruction
void forward_walk_call_instruction(const cfgt::nodet &call_node, std::vector< cfgt::node_indext > &callsite_successor_stack, std::vector< cfgt::node_indext > &callee_head_stack)
Process a call instruction during a forwards reachability walk.
Definition: reachability_slicer.cpp:227
reachability_slicert::slicer_entryt::reaches_assertion
bool reaches_assertion
Definition: reachability_slicer_class.h:38
reachability_slicert::get_sources
std::vector< cfgt::node_indext > get_sources(const is_threadedt &is_threaded, const slicing_criteriont &criterion)
Get the set of nodes that correspond to the given criterion, or that can appear in concurrent executi...
Definition: reachability_slicer.cpp:63
reachability_slicert::operator()
void operator()(goto_functionst &goto_functions, const slicing_criteriont &criterion, bool include_forward_reachability, message_handlert &)
Definition: reachability_slicer.cpp:30
reachability_slicert::search_stack_entryt::search_stack_entryt
search_stack_entryt(cfgt::node_indext node_index, bool caller_is_known)
Definition: reachability_slicer_class.h:68
grapht< cfg_base_nodet< slicer_entryt, goto_programt::const_targett > >::node_indext
nodet::node_indext node_indext
Definition: graph.h:173
is_threadedt
Definition: is_threaded.h:21
reachability_slicert::backward_outwards_walk_from
std::vector< cfgt::node_indext > backward_outwards_walk_from(std::vector< cfgt::node_indext >)
Perform backward depth-first search of the control-flow graph of the goto program,...
Definition: reachability_slicer.cpp:105
reachability_slicert::search_stack_entryt::caller_is_known
bool caller_is_known
If true, this function's caller is known and has already been queued to mark reachable,...
Definition: reachability_slicer_class.h:66
reachability_slicert::slicer_entryt::slicer_entryt
slicer_entryt()
Definition: reachability_slicer_class.h:33
reachability_slicert::slicer_entryt
Definition: reachability_slicer_class.h:31
message_handlert
Definition: message.h:27
goto_program.h
cfg_baset< slicer_entryt >
goto_functionst
A collection of goto functions.
Definition: goto_functions.h:24
cfg_baset< slicer_entryt >::nodet
base_grapht::nodet nodet
Definition: cfg.h:92
reachability_slicert::fixedpoint_from_assertions
void fixedpoint_from_assertions(const is_threadedt &is_threaded, const slicing_criteriont &criterion)
Perform forwards depth-first search of the control-flow graph of the goto program,...
Definition: reachability_slicer.cpp:343
reachability_slicert::slicer_entryt::function_id
irep_idt function_id
Definition: reachability_slicer_class.h:37
reachability_slicert::forward_outwards_walk_from
std::vector< cfgt::node_indext > forward_outwards_walk_from(std::vector< cfgt::node_indext >)
Perform forwards depth-first search of the control-flow graph of the goto program,...
Definition: reachability_slicer.cpp:267
reachability_slicert::forward_inwards_walk_from
void forward_inwards_walk_from(std::vector< cfgt::node_indext >)
Perform forwards depth-first search of the control-flow graph of the goto program,...
Definition: reachability_slicer.cpp:305
goto_programt::const_targett
instructionst::const_iterator const_targett
Definition: goto_program.h:587
reachability_slicert::queuet
std::stack< cfgt::entryt > queuet
Definition: reachability_slicer_class.h:49
reachability_slicert::search_stack_entryt
A search stack entry, used in tracking nodes to mark reachable when walking over the CFG in fixedpoin...
Definition: reachability_slicer_class.h:54
reachability_slicert::fixedpoint_to_assertions
void fixedpoint_to_assertions(const is_threadedt &is_threaded, const slicing_criteriont &criterion)
Perform backward depth-first search of the control-flow graph of the goto program,...
Definition: reachability_slicer.cpp:204
reachability_slicert::cfg
cfgt cfg
Definition: reachability_slicer_class.h:47