GCC Middle and Back End API Reference
check_array_bounds_dom_walker Class Reference
Inheritance diagram for check_array_bounds_dom_walker:
Collaboration diagram for check_array_bounds_dom_walker:

Public Types

enum  reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS }
 

Public Member Functions

 check_array_bounds_dom_walker (array_bounds_checker *checker)
 
 ~check_array_bounds_dom_walker ()
 
edge before_dom_children (basic_block) final override
 
void walk (basic_block)
 
virtual void after_dom_children (basic_block)
 

Static Public Attributes

static const edge STOP = (edge)-1
 

Private Member Functions

bool bb_reachable (struct function *, basic_block)
 
void propagate_unreachable_to_edges (basic_block, FILE *, dump_flags_t)
 

Private Attributes

array_bounds_checkerchecker
 
enum cdi_direction m_dom_direction: 2
 
enum reachability m_reachability: 2
 
bool m_user_bb_to_rpo
 
basic_block m_unreachable_dom
 
int * m_bb_to_rpo
 

Detailed Description

A dom_walker subclass for use by check_all_array_refs, to walk over
all statements of all reachable BBs and call check_array_bounds on
them.   

Member Enumeration Documentation

◆ reachability

enum dom_walker::reachability
inherited
Enumerator
ALL_BLOCKS 
REACHABLE_BLOCKS 
REACHABLE_BLOCKS_PRESERVING_FLAGS 

Constructor & Destructor Documentation

◆ check_array_bounds_dom_walker()

check_array_bounds_dom_walker::check_array_bounds_dom_walker ( array_bounds_checker * checker)
inline

◆ ~check_array_bounds_dom_walker()

check_array_bounds_dom_walker::~check_array_bounds_dom_walker ( )
inline

Member Function Documentation

◆ after_dom_children()

◆ bb_reachable()

bool dom_walker::bb_reachable ( struct function * fun,
basic_block bb )
privateinherited

◆ before_dom_children()

edge check_array_bounds_dom_walker::before_dom_children ( basic_block bb)
finaloverridevirtual
Implementation of dom_walker::before_dom_children.

Walk over all statements of BB and call check_array_bounds on them,
and determine if there's a unique successor edge.   

Reimplemented from dom_walker.

References array_bounds_checker::check_array_bounds(), checker, find_taken_edge(), gimple_has_location(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), is_gimple_debug(), array_bounds_checker::m_stmt, NULL_TREE, si, and walk_gimple_op().

◆ propagate_unreachable_to_edges()

void dom_walker::propagate_unreachable_to_edges ( basic_block bb,
FILE * dump_file,
dump_flags_t dump_flags )
privateinherited
BB has been determined to be unreachable.  Propagate that property
to incoming and outgoing edges of BB as appropriate.   

References CDI_DOMINATORS, dominated_by_p(), dump_file, dump_flags, FOR_EACH_EDGE, basic_block_def::index, dom_walker::m_unreachable_dom, basic_block_def::preds, basic_block_def::succs, and TDF_DETAILS.

Referenced by dom_walker::walk().

◆ walk()

Field Documentation

◆ checker

array_bounds_checker* check_array_bounds_dom_walker::checker
private

Referenced by before_dom_children().

◆ m_bb_to_rpo

int* dom_walker::m_bb_to_rpo
privateinherited

◆ m_dom_direction

enum cdi_direction dom_walker::m_dom_direction
privateinherited

Referenced by dom_walker::walk().

◆ m_reachability

enum reachability dom_walker::m_reachability
privateinherited

◆ m_unreachable_dom

basic_block dom_walker::m_unreachable_dom
privateinherited

◆ m_user_bb_to_rpo

bool dom_walker::m_user_bb_to_rpo
privateinherited

◆ STOP

const edge dom_walker::STOP = (edge)-1
staticinherited

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