|
cprover
|
#include <call_graph.h>
Classes | |
| class | directed_grapht |
| Directed graph representation of this call graph. More... | |
| struct | edge_with_callsitest |
| Edge of the directed graph representation of this call graph. More... | |
| struct | function_nodet |
| Node of the directed graph representation of this call graph. More... | |
Public Types | |
| typedef std::unordered_set< irep_idt, irep_id_hash > | nodest |
| Type of the nodes in the call graph. More... | |
| typedef std::multimap< irep_idt, irep_idt > | edgest |
| Type of the edges in the call graph. More... | |
| typedef std::pair< irep_idt, irep_idt > | edget |
Type of a call graph edge in edgest More... | |
| typedef goto_programt::const_targett | locationt |
Type of a callsite stored in member callsites More... | |
| typedef std::set< locationt > | locationst |
| Type of a set of callsites. More... | |
| typedef std::map< edget, locationst > | callsitest |
| Type mapping from call-graph edges onto the set of call instructions that make that call. More... | |
Public Member Functions | |
| call_grapht (bool collect_callsites=false) | |
| Create empty call graph. More... | |
| call_grapht (const goto_modelt &, bool collect_callsites=false) | |
| Create complete call graph. More... | |
| call_grapht (const goto_functionst &, bool collect_callsites=false) | |
| Create complete call graph. More... | |
| void | output_dot (std::ostream &out) const |
| void | output (std::ostream &out) const |
| void | output_xml (std::ostream &out) const |
| void | add (const irep_idt &caller, const irep_idt &callee) |
| Add edge. More... | |
| void | add (const irep_idt &caller, const irep_idt &callee, locationt callsite) |
| Add edge with optional callsite information. More... | |
| call_grapht | get_inverted () const |
| Returns an inverted copy of this call graph. More... | |
| directed_grapht | get_directed_graph () const |
Returns a grapht representation of this call graph, suitable for use with generic grapht algorithms. More... | |
Static Public Member Functions | |
| static call_grapht | create_from_root_function (const goto_modelt &model, const irep_idt &root, bool collect_callsites) |
| static call_grapht | create_from_root_function (const goto_functionst &functions, const irep_idt &root, bool collect_callsites) |
Public Attributes | |
| edgest | edges |
Call graph, including duplicate key-value pairs when there are parallel edges (see grapht documentation). More... | |
| nodest | nodes |
| callsitest | callsites |
| Map from call-graph edges to a set of callsites that make the given call. More... | |
Protected Member Functions | |
| void | add (const irep_idt &function, const goto_programt &body) |
Private Member Functions | |
| call_grapht (const goto_modelt &model, const irep_idt &root, bool collect_callsites) | |
Create call graph restricted to functions reachable from root More... | |
| call_grapht (const goto_functionst &functions, const irep_idt &root, bool collect_callsites) | |
Create call graph restricted to functions reachable from root More... | |
| std::string | format_callsites (const edget &edge) const |
| Prints callsites responsible for a graph edge as comma-separated location numbers, e.g. More... | |
Private Attributes | |
| bool | collect_callsites |
Definition at line 21 of file call_graph.h.
| typedef std::map<edget, locationst> call_grapht::callsitest |
Type mapping from call-graph edges onto the set of call instructions that make that call.
Definition at line 83 of file call_graph.h.
| typedef std::multimap<irep_idt, irep_idt> call_grapht::edgest |
Type of the edges in the call graph.
Note parallel edges (e.g. A having two callsites both targeting B) result in multiple graph edges.
Definition at line 70 of file call_graph.h.
| typedef std::pair<irep_idt, irep_idt> call_grapht::edget |
Type of a call graph edge in edgest
Definition at line 73 of file call_graph.h.
| typedef std::set<locationt> call_grapht::locationst |
Type of a set of callsites.
Definition at line 79 of file call_graph.h.
Type of a callsite stored in member callsites
Definition at line 76 of file call_graph.h.
| typedef std::unordered_set<irep_idt, irep_id_hash> call_grapht::nodest |
Type of the nodes in the call graph.
Definition at line 66 of file call_graph.h.
|
explicit |
Create empty call graph.
| collect_callsites | if true, then each added graph edge will have the calling instruction recorded in callsites map. |
Definition at line 20 of file call_graph.cpp.
Referenced by create_from_root_function().
|
explicit |
Create complete call graph.
| goto_model | model to search for callsites |
| collect_callsites | if true, then each added graph edge will have the calling instruction recorded in callsites map. |
Definition at line 29 of file call_graph.cpp.
|
explicit |
Create complete call graph.
| goto_functions | functions to search for callsites |
| collect_callsites | if true, then each added graph edge will have the calling instruction recorded in callsites map. |
Definition at line 38 of file call_graph.cpp.
References add(), forall_goto_functions, and nodes.
|
private |
Create call graph restricted to functions reachable from root
| goto_model | model to search for callsites |
| root | function to start exploring the graph |
| collect_callsites | if true, then each added graph edge will have the calling instruction recorded in callsites map. |
Definition at line 114 of file call_graph.cpp.
|
private |
Create call graph restricted to functions reachable from root
| goto_functions | functions to search for callsites |
| root | function to start exploring the graph |
| collect_callsites | if true, then each added graph edge will have the calling instruction recorded in callsites map. |
Definition at line 74 of file call_graph.cpp.
References add(), edges, forall_callsites(), goto_functionst::function_map, goto_program, and nodes.
Add edge.
| caller | caller function |
| callee | callee function |
Definition at line 138 of file call_graph.cpp.
Referenced by add(), call_grapht(), and get_inverted().
Add edge with optional callsite information.
| caller | caller function |
| callee | callee function |
| callsite | call instruction responsible for this edge. Note this is only stored if collect_callsites was specified during construction. |
Definition at line 152 of file call_graph.cpp.
References add(), callsites, and collect_callsites.
|
protected |
Definition at line 122 of file call_graph.cpp.
References add(), and forall_callsites().
|
inlinestatic |
Definition at line 31 of file call_graph.h.
References call_grapht(), and collect_callsites.
Referenced by aggressive_slicert::aggressive_slicert(), goto_instrument_parse_optionst::doit(), and slice_global_inits().
|
inlinestatic |
Definition at line 39 of file call_graph.h.
References call_grapht(), and collect_callsites.
|
private |
Prints callsites responsible for a graph edge as comma-separated location numbers, e.g.
"{1, 2, 3}".
| edge | graph edge |
Definition at line 240 of file call_graph.cpp.
References callsites, collect_callsites, loc, PRECONDITION, and to_string().
Referenced by output(), and output_dot().
| call_grapht::directed_grapht call_grapht::get_directed_graph | ( | ) | const |
Returns a grapht representation of this call graph, suitable for use with generic grapht algorithms.
Note that parallel edges in call_grapht (e.g. A { B(); B(); } appearing as two A->B edges) will be condensed in the grapht output, so only one edge will appear. If collect_callsites was set when this call-graph was constructed the edge will be annotated with the call-site set.
Definition at line 208 of file call_graph.cpp.
References grapht< N >::add_edge(), callsites, collect_callsites, edges, function_indicest::function_indices, grapht< N >::has_edge(), nodes, call_grapht::directed_grapht::nodes_by_name, and grapht< N >::out().
Referenced by aggressive_slicert::aggressive_slicert(), and slice_global_inits().
| call_grapht call_grapht::get_inverted | ( | ) | const |
Returns an inverted copy of this call graph.
Definition at line 164 of file call_graph.cpp.
| void call_grapht::output | ( | std::ostream & | out | ) | const |
Definition at line 271 of file call_graph.cpp.
References collect_callsites, edges, and format_callsites().
Referenced by goto_instrument_parse_optionst::doit().
| void call_grapht::output_dot | ( | std::ostream & | out | ) | const |
Definition at line 254 of file call_graph.cpp.
References collect_callsites, edges, and format_callsites().
Referenced by goto_instrument_parse_optionst::doit().
| void call_grapht::output_xml | ( | std::ostream & | out | ) | const |
Definition at line 281 of file call_graph.cpp.
References collect_callsites, edges, xmlt::escape_attribute(), and id2string().
Referenced by goto_instrument_parse_optionst::doit().
| callsitest call_grapht::callsites |
Map from call-graph edges to a set of callsites that make the given call.
Definition at line 94 of file call_graph.h.
Referenced by add(), format_callsites(), and get_directed_graph().
|
private |
Definition at line 147 of file call_graph.h.
Referenced by add(), create_from_root_function(), format_callsites(), get_directed_graph(), output(), output_dot(), and output_xml().
| edgest call_grapht::edges |
Call graph, including duplicate key-value pairs when there are parallel edges (see grapht documentation).
This representation is retained for backward compatibility; use get_directed_graph() to get a generic directed graph representation that provides more graph algorithms (shortest path, SCCs and so on).
Definition at line 90 of file call_graph.h.
Referenced by add(), call_grapht(), get_directed_graph(), get_inverted(), output(), output_dot(), and output_xml().
| nodest call_grapht::nodes |
Definition at line 91 of file call_graph.h.
Referenced by add(), call_grapht(), get_directed_graph(), and get_inverted().