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

#include <svalue.h>

Inheritance diagram for ana::unmergeable_svalue:
Collaboration diagram for ana::unmergeable_svalue:

Public Types

typedef unsigned id_t

Public Member Functions

 unmergeable_svalue (symbol::id_t id, const svalue *arg)
enum svalue_kind get_kind () const final override
const unmergeable_svalue * dyn_cast_unmergeable_svalue () const final override
void dump_to_pp (pretty_printer *pp, bool simple) const final override
void print_dump_widget_label (pretty_printer *pp) const final override
void add_dump_widget_children (text_art::tree_widget &w, const dump_widget_info &dwi) const final override
void accept (visitor *v) const final override
bool implicitly_live_p (const svalue_set *, const region_model *) const final override
const svalue * get_arg () const
tree get_type () const
void print (const region_model &model, pretty_printer *pp) const
void dump () const
void dump (bool simple) const
label_text get_desc (bool simple=true) const
std::unique_ptr< json::value > to_json () const
std::unique_ptr< text_art::tree_widget > make_dump_widget (const dump_widget_info &dwi, const char *prefix=nullptr) const
virtual const region_svalue * dyn_cast_region_svalue () const
virtual const constant_svalue * dyn_cast_constant_svalue () const
virtual const poisoned_svalue * dyn_cast_poisoned_svalue () const
virtual const setjmp_svalue * dyn_cast_setjmp_svalue () const
virtual const initial_svalue * dyn_cast_initial_svalue () const
virtual const unaryop_svalue * dyn_cast_unaryop_svalue () const
virtual const binop_svalue * dyn_cast_binop_svalue () const
virtual const sub_svalue * dyn_cast_sub_svalue () const
virtual const repeated_svalue * dyn_cast_repeated_svalue () const
virtual const bits_within_svalue * dyn_cast_bits_within_svalue () const
virtual const widening_svalue * dyn_cast_widening_svalue () const
virtual const compound_svalue * dyn_cast_compound_svalue () const
virtual const conjured_svalue * dyn_cast_conjured_svalue () const
virtual const asm_output_svalue * dyn_cast_asm_output_svalue () const
virtual const const_fn_result_svalue * dyn_cast_const_fn_result_svalue () const
tree maybe_get_constant () const
const region * maybe_get_region () const
const svalue * maybe_undo_cast () const
const svalue * unwrap_any_unmergeable () const
const svalue * can_merge_p (const svalue *other, region_model_manager *mgr, model_merger *merger) const
bool live_p (const svalue_set *live_svalues, const region_model *model) const
bool involves_p (const svalue *other) const
const svalue * extract_bit_range (tree type, const bit_range &subrange, region_model_manager *mgr) const
virtual const svalue * maybe_fold_bits_within (tree type, const bit_range &subrange, region_model_manager *mgr) const
virtual bool all_zeroes_p () const
virtual bool can_have_associated_state_p () const
const region * maybe_get_deref_base_region () const
bool maybe_print_for_user (pretty_printer *pp, const region_model &model, const svalue *outer_sval=nullptr) const
tree maybe_get_type_from_typeinfo () const
bool maybe_get_value_range (value_range &out) const
const complexity & get_complexity () const
id_t get_id () const

Static Public Member Functions

static int cmp_ptr (const svalue *, const svalue *)
static int cmp_ptr_ptr (const void *, const void *)
static int cmp_ids (const symbol *s1, const symbol *s2)

Protected Member Functions

void print_svalue_node_label (pretty_printer *pp) const

Private Member Functions

virtual bool maybe_get_value_range_1 (value_range &out) const

Private Attributes

const svalue * m_arg
tree m_type
complexity m_complexity
id_t m_id

Detailed Description

Concrete subclass of svalue: decorate another svalue,
so that the resulting svalue can be identified as being
"interesting to control flow".
For example, consider the return value from setjmp.  We
don't want to merge states in which the result is 0 with
those in which the result is non-zero.  By using an
unmergeable_svalue for the result, we can inhibit such merges
and have separate exploded nodes for those states, keeping
the first and second returns from setjmp distinct in the exploded
graph.   

Member Typedef Documentation

◆ id_t

typedef unsigned ana::symbol::id_t
inherited

Constructor & Destructor Documentation

◆ unmergeable_svalue()

ana::unmergeable_svalue::unmergeable_svalue ( symbol::id_t id,
const svalue * arg )
inline

Member Function Documentation

◆ accept()

void ana::unmergeable_svalue::accept ( visitor * v) const
finaloverridevirtual

Implements ana::svalue.

◆ add_dump_widget_children()

void ana::unmergeable_svalue::add_dump_widget_children ( text_art::tree_widget & w,
const dump_widget_info & dwi ) const
finaloverridevirtual

Implements ana::svalue.

◆ all_zeroes_p()

virtual bool ana::svalue::all_zeroes_p ( ) const
virtualinherited

◆ can_have_associated_state_p()

virtual bool ana::svalue::can_have_associated_state_p ( ) const
inlinevirtualinherited

◆ can_merge_p()

const svalue * ana::svalue::can_merge_p ( const svalue * other,
region_model_manager * mgr,
model_merger * merger ) const
inherited

References svalue().

◆ cmp_ids()

int ana::symbol::cmp_ids ( const symbol * s1,
const symbol * s2 )
staticinherited

References symbol().

◆ cmp_ptr()

int ana::svalue::cmp_ptr ( const svalue * ,
const svalue *  )
staticinherited

References svalue().

◆ cmp_ptr_ptr()

int ana::svalue::cmp_ptr_ptr ( const void * ,
const void *  )
staticinherited

◆ dump() [1/2]

void ana::svalue::dump ( ) const
inherited

◆ dump() [2/2]

void ana::svalue::dump ( bool simple) const
inherited

◆ dump_to_pp()

void ana::unmergeable_svalue::dump_to_pp ( pretty_printer * pp,
bool simple ) const
finaloverridevirtual

Implements ana::svalue.

◆ dyn_cast_asm_output_svalue()

virtual const asm_output_svalue * ana::svalue::dyn_cast_asm_output_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::asm_output_svalue.

◆ dyn_cast_binop_svalue()

virtual const binop_svalue * ana::svalue::dyn_cast_binop_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::binop_svalue.

◆ dyn_cast_bits_within_svalue()

virtual const bits_within_svalue * ana::svalue::dyn_cast_bits_within_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::bits_within_svalue.

◆ dyn_cast_compound_svalue()

virtual const compound_svalue * ana::svalue::dyn_cast_compound_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::compound_svalue.

Referenced by contains_unknown_p().

◆ dyn_cast_conjured_svalue()

virtual const conjured_svalue * ana::svalue::dyn_cast_conjured_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::conjured_svalue.

◆ dyn_cast_const_fn_result_svalue()

virtual const const_fn_result_svalue * ana::svalue::dyn_cast_const_fn_result_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::const_fn_result_svalue.

◆ dyn_cast_constant_svalue()

virtual const constant_svalue * ana::svalue::dyn_cast_constant_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::constant_svalue.

◆ dyn_cast_initial_svalue()

virtual const initial_svalue * ana::svalue::dyn_cast_initial_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::initial_svalue.

◆ dyn_cast_poisoned_svalue()

virtual const poisoned_svalue * ana::svalue::dyn_cast_poisoned_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::poisoned_svalue.

◆ dyn_cast_region_svalue()

virtual const region_svalue * ana::svalue::dyn_cast_region_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::region_svalue.

◆ dyn_cast_repeated_svalue()

virtual const repeated_svalue * ana::svalue::dyn_cast_repeated_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::repeated_svalue.

◆ dyn_cast_setjmp_svalue()

virtual const setjmp_svalue * ana::svalue::dyn_cast_setjmp_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::setjmp_svalue.

◆ dyn_cast_sub_svalue()

virtual const sub_svalue * ana::svalue::dyn_cast_sub_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::sub_svalue.

◆ dyn_cast_unaryop_svalue()

virtual const unaryop_svalue * ana::svalue::dyn_cast_unaryop_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::unaryop_svalue.

◆ dyn_cast_unmergeable_svalue()

const unmergeable_svalue * ana::unmergeable_svalue::dyn_cast_unmergeable_svalue ( ) const
inlinefinaloverridevirtual

Reimplemented from ana::svalue.

References final().

◆ dyn_cast_widening_svalue()

virtual const widening_svalue * ana::svalue::dyn_cast_widening_svalue ( ) const
inlinevirtualinherited

Reimplemented in ana::widening_svalue.

◆ extract_bit_range()

const svalue * ana::svalue::extract_bit_range ( tree type,
const bit_range & subrange,
region_model_manager * mgr ) const
inherited

References svalue().

◆ get_arg()

const svalue * ana::unmergeable_svalue::get_arg ( ) const
inline

References m_arg, and ana::svalue::svalue().

◆ get_complexity()

const complexity & ana::symbol::get_complexity ( ) const
inlineinherited

◆ get_desc()

label_text ana::svalue::get_desc ( bool simple = true) const
inherited

◆ get_id()

id_t ana::symbol::get_id ( ) const
inlineinherited

References m_id.

◆ get_kind()

enum svalue_kind ana::unmergeable_svalue::get_kind ( ) const
inlinefinaloverridevirtual

Implements ana::svalue.

References final(), and ana::SK_UNMERGEABLE.

◆ get_type()

tree ana::svalue::get_type ( ) const
inlineinherited

◆ implicitly_live_p()

bool ana::unmergeable_svalue::implicitly_live_p ( const svalue_set * ,
const region_model *  ) const
finaloverridevirtual

Reimplemented from ana::svalue.

◆ involves_p()

bool ana::svalue::involves_p ( const svalue * other) const
inherited

References svalue().

◆ live_p()

bool ana::svalue::live_p ( const svalue_set * live_svalues,
const region_model * model ) const
inherited

◆ make_dump_widget()

std::unique_ptr< text_art::tree_widget > ana::svalue::make_dump_widget ( const dump_widget_info & dwi,
const char * prefix = nullptr ) const
inherited

◆ maybe_fold_bits_within()

virtual const svalue * ana::svalue::maybe_fold_bits_within ( tree type,
const bit_range & subrange,
region_model_manager * mgr ) const
virtualinherited

◆ maybe_get_constant()

tree ana::svalue::maybe_get_constant ( ) const
inherited

◆ maybe_get_deref_base_region()

const region * ana::svalue::maybe_get_deref_base_region ( ) const
inherited

◆ maybe_get_region()

const region * ana::svalue::maybe_get_region ( ) const
inherited

◆ maybe_get_type_from_typeinfo()

tree ana::svalue::maybe_get_type_from_typeinfo ( ) const
inherited

◆ maybe_get_value_range()

bool ana::svalue::maybe_get_value_range ( value_range & out) const
inlineinherited

◆ maybe_get_value_range_1()

virtual bool ana::svalue::maybe_get_value_range_1 ( value_range & out) const
privatevirtualinherited

◆ maybe_print_for_user()

bool ana::svalue::maybe_print_for_user ( pretty_printer * pp,
const region_model & model,
const svalue * outer_sval = nullptr ) const
inherited

References svalue().

◆ maybe_undo_cast()

const svalue * ana::svalue::maybe_undo_cast ( ) const
inherited

References svalue().

◆ print()

void ana::svalue::print ( const region_model & model,
pretty_printer * pp ) const
inherited

◆ print_dump_widget_label()

void ana::unmergeable_svalue::print_dump_widget_label ( pretty_printer * pp) const
finaloverridevirtual

Implements ana::svalue.

◆ print_svalue_node_label()

void ana::svalue::print_svalue_node_label ( pretty_printer * pp) const
protectedinherited

◆ to_json()

std::unique_ptr< json::value > ana::svalue::to_json ( ) const
inherited

◆ unwrap_any_unmergeable()

const svalue * ana::svalue::unwrap_any_unmergeable ( ) const
inherited

References svalue().

Field Documentation

◆ m_arg

const svalue* ana::unmergeable_svalue::m_arg
private

Referenced by get_arg(), and unmergeable_svalue().

◆ m_complexity

complexity ana::symbol::m_complexity
privateinherited

Referenced by get_complexity(), and symbol().

◆ m_id

id_t ana::symbol::m_id
privateinherited

Referenced by get_id(), and symbol().

◆ m_type

tree ana::svalue::m_type
privateinherited

Referenced by get_type(), and svalue().


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