|
| 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 |
|
const complexity & | get_complexity () const |
|
id_t | get_id () const |
|
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.