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::digraphs::nodeget_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_graph_kind () const
void set_graph_kind (const char *)
const char * get_property (const json::string_property &property) const
json::arrayget_property (const json::array_of_string_property &property) const
template<typename EnumType>
EnumType get_property (const json::enum_property< EnumType > &property) const
const json::valueget_property (const json::json_property &property) const
void set_property (const json::string_property &property, const char *utf8_value)
void set_property (const json::integer_property &property, long value)
void set_property (const json::bool_property &property, bool value)
template<typename EnumType>
void set_property (const json::enum_property< EnumType > &property, EnumType value)
void set_property (const json::json_property &property, std::unique_ptr< json::value > value)
bool maybe_get_property (const json::integer_property &property, long &out) const
tristate get_property_as_tristate (const json::bool_property &property) const
json::objectget_property_bag () const
json::objectensure_property_bag ()
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::digraphs::nodecreate_and_add_state_node (const region &reg)
std::unique_ptr< diagnostics::digraphs::nodemake_state_node (enum state_node_properties::kind_t kind, std::string id)
std::unique_ptr< diagnostics::digraphs::nodemake_memspace_state_node (const region &reg, enum state_node_properties::kind_t 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::digraphs::node &, const region &reg, const concrete_bindings_t &conc_bindings, bool create_all)
void set_attr_for_dynamic_extents (const region &reg, diagnostics::digraphs::node &)
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().

◆ 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.

◆ clone()

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

◆ create_and_add_state_node()

diagnostics::digraphs::node & 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

◆ ensure_property_bag()

json::object & digraph_object::ensure_property_bag ( )
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_graph_kind()

const char * digraph< GraphTraits >::get_graph_kind ( ) const
inherited

◆ 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::digraphs::node & ana::analyzer_state_graph::get_or_create_state_node ( const region & reg)

◆ get_property() [1/4]

json::array * digraph_object::get_property ( const json::array_of_string_property & property) const
inherited
Array-of-string properties.   

References json::array::dyn_cast_array(), and m_property_bag.

◆ get_property() [2/4]

template<typename EnumType>
EnumType diagnostics::digraphs::object::get_property ( const json::enum_property< EnumType > & property) const
inlineinherited

◆ get_property() [3/4]

const json::value * digraph_object::get_property ( const json::json_property & property) const
inherited
json::value properties.   

References m_property_bag.

◆ get_property() [4/4]

const char * digraph_object::get_property ( const json::string_property & property) const
inherited

◆ get_property_as_tristate()

tristate digraph_object::get_property_as_tristate ( const json::bool_property & property) const
inherited

◆ 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

◆ make_memspace_state_node()

std::unique_ptr< diagnostics::digraphs::node > ana::analyzer_state_graph::make_memspace_state_node ( const region & reg,
enum state_node_properties::kind_t 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 ( enum state_node_properties::kind_t kind,
std::string id )
private

◆ maybe_get_property()

bool digraph_object::maybe_get_property ( const json::integer_property & property,
long & out_value ) const
inherited

◆ populate_state_node_for_typed_region()

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

◆ set_attr_for_dynamic_extents()

void ana::analyzer_state_graph::set_attr_for_dynamic_extents ( const region & reg,
diagnostics::digraphs::node &  )
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_graph_kind()

void digraph< GraphTraits >::set_graph_kind ( const char * kind)
inherited

◆ set_property() [1/5]

void digraph_object::set_property ( const json::bool_property & property,
bool value )
inherited
Bool properties.   

References ensure_property_bag().

◆ set_property() [2/5]

template<typename EnumType>
void diagnostics::digraphs::object::set_property ( const json::enum_property< EnumType > & property,
EnumType value )
inlineinherited

References ensure_property_bag().

◆ set_property() [3/5]

void digraph_object::set_property ( const json::integer_property & property,
long value )
inherited

References ensure_property_bag().

◆ set_property() [4/5]

void digraph_object::set_property ( const json::json_property & property,
std::unique_ptr< json::value > value )
inherited

References ensure_property_bag().

◆ set_property() [5/5]

void digraph_object::set_property ( const json::string_property & property,
const char * utf8_value )
inherited

◆ set_property_bag()

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

References m_property_bag.

◆ 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: