GCC Middle and Back End API Reference
ana::analyzer_state_graph Class Reference

#include <ana-state-to-diagnostic-state.h>

Inheritance diagram for ana::analyzer_state_graph:
Collaboration diagram for ana::analyzer_state_graph:

Data Structures

struct  pending_edge

Public Member Functions

 analyzer_state_graph (const program_state &state, const extrinsic_state &ext_state)
diagnostics::state_graphs::state_node_ref get_or_create_state_node (const region &reg)
const char * get_description () const
void set_description (const char *desc)
void set_description (std::string desc)
nodeget_node_by_id (const char *id) const
edgeget_edge_by_id (const char *id) const
size_t get_num_nodes () const
nodeget_node (size_t idx) const
size_t get_num_edges () const
edgeget_edge (size_t idx) const
void dump () const
std::unique_ptr< json::objectmake_json_sarif_graph () const
std::unique_ptr< dot::graphmake_dot_graph () const
void add_node (std::unique_ptr< node > n)
void add_edge (std::unique_ptr< edge > e)
void add_edge (const char *id, node &src_node, node &dst_node, const char *label=nullptr)
std::unique_ptr< digraphclone () const
const char * get_attr (const char *key_prefix, const char *key) const
void set_attr (const char *key_prefix, const char *key, const char *value)
void set_json_attr (const char *key_prefix, const char *key, std::unique_ptr< json::value > value)
json::objectget_property_bag () const
void set_property_bag (std::unique_ptr< json::object > property_bag)

Private Types

typedef std::map< bit_range, const svalue * > concrete_bindings_t

Private Member Functions

diagnostics::state_graphs::state_node_ref create_and_add_state_node (const region &reg)
std::unique_ptr< diagnostics::digraphs::nodemake_state_node (diagnostics::state_graphs::node_kind kind, std::string id)
std::unique_ptr< diagnostics::digraphs::nodemake_memspace_state_node (const region &reg, enum diagnostics::state_graphs::node_kind kind)
std::unique_ptr< diagnostics::digraphs::nodecreate_state_node (const region &reg)
void create_state_nodes_for_binding_cluster (const binding_cluster &cluster, bool create_all)
std::unique_ptr< diagnostics::digraphs::nodecreate_state_node_for_conc_bindings (const concrete_bindings_t &conc_bindings)
bool get_bit_range_within_base_region (const region &reg, bit_range &out)
void populate_state_node_for_typed_region (diagnostics::state_graphs::state_node_ref, const region &reg, const concrete_bindings_t &conc_bindings, bool create_all)
void set_attr_for_dynamic_extents (const region &reg, diagnostics::state_graphs::state_node_ref)
bool show_child_state_node_for_child_region_p (const region &reg, const concrete_bindings_t &conc_bindings, bool create_all)
std::unique_ptr< diagnostics::digraphs::nodecreate_state_node_for_svalue (const svalue *sval)
std::string make_node_id (const region &reg)
std::string make_node_id (const char *prefix)
void add_node_id (std::string node_id, node &new_node)
void add_edge_id (std::string edge_id, edge &new_edge)
std::string make_edge_id (const char *edge_id)

Private Attributes

tree_logical_location_manager m_logical_loc_mgr
const program_statem_state
const extrinsic_statem_ext_state
region_model_managerm_mgr
std::map< const region *, diagnostics::digraphs::node * > m_region_to_state_node_map
std::map< const region *, treem_types_for_untyped_regions
unsigned m_next_id
std::vector< pending_edgem_pending_edges
std::unique_ptr< std::string > m_description
std::map< std::string, node * > m_id_to_node_map
std::map< std::string, edge * > m_id_to_edge_map
std::vector< std::unique_ptr< node > > m_nodes
std::vector< std::unique_ptr< edge > > m_edges
size_t m_next_edge_id_index
std::unique_ptr< json::objectm_property_bag

Member Typedef Documentation

◆ concrete_bindings_t

Constructor & Destructor Documentation

◆ analyzer_state_graph()

ana::analyzer_state_graph::analyzer_state_graph ( const program_state & state,
const extrinsic_state & ext_state )

Member Function Documentation

◆ add_edge() [1/2]

void digraph< GraphTraits >::add_edge ( const char * id,
node & src_node,
node & dst_node,
const char * label = nullptr )
inherited

References add_edge(), and node.

◆ add_edge() [2/2]

void diagnostics::digraphs::digraph::add_edge ( std::unique_ptr< edge > e)
inlineinherited

◆ add_edge_id()

void diagnostics::digraphs::digraph::add_edge_id ( std::string edge_id,
edge & new_edge )
inlineprivateinherited

References edge, and m_id_to_edge_map.

◆ add_node()

void diagnostics::digraphs::digraph::add_node ( std::unique_ptr< node > n)
inlineinherited

References gcc_assert, and m_nodes.

Referenced by diagnostic_graph::add_node_with_id().

◆ add_node_id()

void diagnostics::digraphs::digraph::add_node_id ( std::string node_id,
node & new_node )
inlineprivateinherited

References m_id_to_node_map, and node.

◆ clone()

std::unique_ptr< diagnostics::digraphs::digraph > digraph< GraphTraits >::clone ( ) const
inherited

◆ create_and_add_state_node()

diagnostics::state_graphs::state_node_ref ana::analyzer_state_graph::create_and_add_state_node ( const region & reg)
private

◆ create_state_node()

std::unique_ptr< diagnostics::digraphs::node > ana::analyzer_state_graph::create_state_node ( const region & reg)
private

◆ create_state_node_for_conc_bindings()

std::unique_ptr< diagnostics::digraphs::node > ana::analyzer_state_graph::create_state_node_for_conc_bindings ( const concrete_bindings_t & conc_bindings)
private

◆ create_state_node_for_svalue()

std::unique_ptr< diagnostics::digraphs::node > ana::analyzer_state_graph::create_state_node_for_svalue ( const svalue * sval)
private

◆ create_state_nodes_for_binding_cluster()

void ana::analyzer_state_graph::create_state_nodes_for_binding_cluster ( const binding_cluster & cluster,
bool create_all )
private

◆ dump()

DEBUG_FUNCTION void digraph< GraphTraits >::dump ( ) const
inherited

◆ get_attr()

const char * diagnostics::digraphs::object::get_attr ( const char * key_prefix,
const char * key ) const
inherited

◆ get_bit_range_within_base_region()

bool ana::analyzer_state_graph::get_bit_range_within_base_region ( const region & reg,
bit_range & out )
private

◆ get_description()

const char * diagnostics::digraphs::digraph::get_description ( ) const
inlineinherited

◆ get_edge()

edge & diagnostics::digraphs::digraph::get_edge ( size_t idx) const
inlineinherited

References m_edges.

Referenced by state_diagram::state_diagram().

◆ get_edge_by_id()

edge * diagnostics::digraphs::digraph::get_edge_by_id ( const char * id) const
inlineinherited

References m_id_to_edge_map.

◆ get_node()

node & diagnostics::digraphs::digraph::get_node ( size_t idx) const
inlineinherited

References m_nodes.

Referenced by state_diagram::state_diagram().

◆ get_node_by_id()

node * diagnostics::digraphs::digraph::get_node_by_id ( const char * id) const
inlineinherited

References m_id_to_node_map.

◆ get_num_edges()

size_t diagnostics::digraphs::digraph::get_num_edges ( ) const
inlineinherited

References m_edges.

Referenced by state_diagram::state_diagram().

◆ get_num_nodes()

size_t diagnostics::digraphs::digraph::get_num_nodes ( ) const
inlineinherited

References m_nodes.

Referenced by state_diagram::state_diagram().

◆ get_or_create_state_node()

diagnostics::state_graphs::state_node_ref ana::analyzer_state_graph::get_or_create_state_node ( const region & reg)

◆ get_property_bag()

json::object * diagnostics::digraphs::object::get_property_bag ( ) const
inlineinherited

◆ make_dot_graph()

std::unique_ptr< dot::graph > digraph< GraphTraits >::make_dot_graph ( ) const
inherited

◆ make_edge_id()

std::string digraph< GraphTraits >::make_edge_id ( const char * edge_id)
privateinherited
Utility function for edge ids: either use EDGE_ID, or
generate a unique one for when we don't care about the name.

Edges in SARIF "SHALL" have an id that's unique within the graph
(SARIF 2.1.0 §3.41.2).  This is so that graph traversals can refer
to edges by id (SARIF 2.1.0's §3.43.2 edgeId property).   

References candidate(), m_id_to_edge_map, and m_next_edge_id_index.

◆ make_json_sarif_graph()

std::unique_ptr< json::object > digraph< GraphTraits >::make_json_sarif_graph ( ) const
inherited

References diagnostics::make_sarif_graph().

Referenced by dump().

◆ make_memspace_state_node()

std::unique_ptr< diagnostics::digraphs::node > ana::analyzer_state_graph::make_memspace_state_node ( const region & reg,
enum diagnostics::state_graphs::node_kind kind )
private

◆ make_node_id() [1/2]

std::string ana::analyzer_state_graph::make_node_id ( const char * prefix)
private

◆ make_node_id() [2/2]

std::string ana::analyzer_state_graph::make_node_id ( const region & reg)
private

◆ make_state_node()

std::unique_ptr< diagnostics::digraphs::node > ana::analyzer_state_graph::make_state_node ( diagnostics::state_graphs::node_kind kind,
std::string id )
private

◆ populate_state_node_for_typed_region()

void ana::analyzer_state_graph::populate_state_node_for_typed_region ( diagnostics::state_graphs::state_node_ref ,
const region & reg,
const concrete_bindings_t & conc_bindings,
bool create_all )
private

◆ set_attr()

void diagnostics::digraphs::object::set_attr ( const char * key_prefix,
const char * key,
const char * value )
inherited

References set_json_attr().

◆ set_attr_for_dynamic_extents()

void ana::analyzer_state_graph::set_attr_for_dynamic_extents ( const region & reg,
diagnostics::state_graphs::state_node_ref  )
private

◆ set_description() [1/2]

void diagnostics::digraphs::digraph::set_description ( const char * desc)
inlineinherited

References m_description.

◆ set_description() [2/2]

void diagnostics::digraphs::digraph::set_description ( std::string desc)
inlineinherited

References m_description.

◆ set_json_attr()

void diagnostics::digraphs::object::set_json_attr ( const char * key_prefix,
const char * key,
std::unique_ptr< json::value > value )
inherited

References m_property_bag.

Referenced by set_attr().

◆ set_property_bag()

void diagnostics::digraphs::object::set_property_bag ( std::unique_ptr< json::object > property_bag)
inlineinherited

◆ show_child_state_node_for_child_region_p()

bool ana::analyzer_state_graph::show_child_state_node_for_child_region_p ( const region & reg,
const concrete_bindings_t & conc_bindings,
bool create_all )
private

Field Documentation

◆ m_description

std::unique_ptr<std::string> diagnostics::digraphs::digraph::m_description
privateinherited

◆ m_edges

std::vector<std::unique_ptr<edge> > diagnostics::digraphs::digraph::m_edges
privateinherited

◆ m_ext_state

const extrinsic_state& ana::analyzer_state_graph::m_ext_state
private

◆ m_id_to_edge_map

std::map<std::string, edge *> diagnostics::digraphs::digraph::m_id_to_edge_map
privateinherited

◆ m_id_to_node_map

std::map<std::string, node *> diagnostics::digraphs::digraph::m_id_to_node_map
privateinherited

Referenced by add_node_id(), and get_node_by_id().

◆ m_logical_loc_mgr

tree_logical_location_manager ana::analyzer_state_graph::m_logical_loc_mgr
private

◆ m_mgr

region_model_manager& ana::analyzer_state_graph::m_mgr
private

◆ m_next_edge_id_index

size_t diagnostics::digraphs::digraph::m_next_edge_id_index
privateinherited

Referenced by digraph(), and make_edge_id().

◆ m_next_id

unsigned ana::analyzer_state_graph::m_next_id
private

◆ m_nodes

std::vector<std::unique_ptr<node> > diagnostics::digraphs::digraph::m_nodes
privateinherited

◆ m_pending_edges

std::vector<pending_edge> ana::analyzer_state_graph::m_pending_edges
private

◆ m_property_bag

std::unique_ptr<json::object> diagnostics::digraphs::object::m_property_bag
privateinherited

◆ m_region_to_state_node_map

std::map<const region *, diagnostics::digraphs::node *> ana::analyzer_state_graph::m_region_to_state_node_map
private

◆ m_state

const program_state& ana::analyzer_state_graph::m_state
private

◆ m_types_for_untyped_regions

std::map<const region *, tree> ana::analyzer_state_graph::m_types_for_untyped_regions
private

The documentation for this class was generated from the following file: