21#ifndef GCC_ANALYZER_STORE_H
22#define GCC_ANALYZER_STORE_H
243 std::unique_ptr<json::object>
to_json ()
const;
290 bit_range *out_overhanging_bit_range)
const;
318 return hstate.
end ();
337 std::unique_ptr<json::object>
to_json ()
const;
456 return key->concrete_p ();
526 using map_t = std::map<bit_range, const svalue *>;
536 return m_map == other.m_map;
541 return m_map != other.m_map;
566 m_map.insert ({bits, sval});
587 return m_map.find (bits);
592 return m_map.find (bits);
609 std::vector<std::pair<bit_range, const svalue &>>
636 &&
m_sval == other.m_sval);
663 symbolic_bindings_t::const_iterator symbolic_iter)
672 return !(*
this == other);
692 symbolic_bindings_t::iterator symbolic_iter)
701 return !(*
this == other);
722 return !(*
this == other);
754 std::unique_ptr<json::object>
to_json ()
const;
763 bool always_overlap);
798 return !(*
this == other);
812 std::unique_ptr<json::object>
to_json ()
const;
814 std::unique_ptr<text_art::tree_widget>
825 const region *reg_to_bind,
826 const region *reg_for_overlap,
844 template <
typename T>
848 for (
auto iter =
m_map.begin (); iter !=
m_map.end (); ++iter)
849 cb (iter.get_svalue (), user_data);
936 return !(*
this == other);
948 std::unique_ptr<json::object>
to_json ()
const;
950 std::unique_ptr<text_art::tree_widget>
977 template <
typename T>
983 cb ((*iter).first, user_data);
1005 const region *base_reg_b)
const;
1012 const store &summary);
1014 const store &summary,
1023 const region *base_reg_b)
const;
1056 bits.m_size_in_bits);
binding_map m_map
Definition store.h:901
const_iterator_t end() const
Definition store.h:884
void bind(store_manager *mgr, const region *, const svalue *)
void dump(bool simple) const
void get_representative_path_vars(const region_model *model, svalue_set *visited, const region *base_reg, const svalue *sval, logger *logger, auto_vec< path_var > *out_pvs) const
void fill_region(store_manager *mgr, const region *reg, const svalue *sval)
binding_cluster(store_manager &store_mgr, const region *base_region)
void on_asm(const gasm *stmt, store_manager *mgr, const conjured_purge &p)
const svalue * get_binding_recursive(store_manager *mgr, const region *reg) const
void for_each_value(void(*cb)(const svalue *sval, T user_data), T user_data) const
Definition store.h:845
binding_map & get_map()
Definition store.h:890
void bind_compound_sval(store_manager *mgr, const region *reg, const compound_svalue *compound_sval)
std::unique_ptr< text_art::tree_widget > make_dump_widget(const text_art::dump_widget_info &dwi, store_manager *mgr) const
bool m_escaped
Definition store.h:909
friend class store
Definition store.h:786
void mark_region_as_unknown(store_manager *mgr, const region *reg_to_bind, const region *reg_for_overlap, uncertainty_t *uncertainty, svalue_set *maybe_live_values)
binding_cluster(const binding_cluster &other)
void purge_region(store_manager *mgr, const region *reg)
void clobber_region(store_manager *mgr, const region *reg)
void make_unknown_relative_to(const binding_cluster *other_cluster, store *out_store, store_manager *mgr)
bool operator==(const binding_cluster &other) const
binding_map::iterator iterator_t
Definition store.h:789
iterator_t begin()
Definition store.h:886
const_iterator_t begin() const
Definition store.h:883
void bind_key(const binding_key *key, const svalue *sval)
bool empty_p() const
Definition store.h:872
const svalue * get_any_binding(store_manager *mgr, const region *reg) const
bool operator!=(const binding_cluster &other) const
Definition store.h:796
binding_cluster & operator=(const binding_cluster &other)
void purge_state_involving(const svalue *sval, region_model_manager *sval_mgr)
const svalue * get_any_value(const binding_key *key) const
void dump_to_pp(pretty_printer *pp, bool simple, bool multiline) const
const region * get_base_region() const
Definition store.h:805
const region * m_base_region
Definition store.h:899
const svalue * maybe_get_compound_binding(store_manager *mgr, const region *reg) const
bool touched_p() const
Definition store.h:869
const binding_map & get_map() const
Definition store.h:889
iterator_t end()
Definition store.h:887
binding_map::const_iterator const_iterator_t
Definition store.h:788
std::unique_ptr< json::object > to_json() const
void remove_overlapping_bindings(store_manager *mgr, const region *reg, uncertainty_t *uncertainty, svalue_set *maybe_live_values)
void zero_fill_region(store_manager *mgr, const region *reg)
const svalue * get_binding(store_manager *mgr, const region *reg) const
static bool can_merge_p(const binding_cluster *cluster_a, const binding_cluster *cluster_b, binding_cluster *out_cluster, store *out_store, store_manager *mgr, model_merger *merger)
void on_unknown_fncall(const gcall &call, store_manager *mgr, const conjured_purge &p)
bool m_touched
Definition store.h:915
const svalue * maybe_get_simple_value(store_manager *mgr) const
void dump(bool simple) const
static const binding_key * make(store_manager *mgr, const region *r)
static int cmp_ptrs(const void *, const void *)
virtual const symbolic_binding * dyn_cast_symbolic_binding() const
Definition store.h:227
virtual bool concrete_p() const =0
virtual void dump_to_pp(pretty_printer *pp, bool simple) const =0
virtual ~binding_key()
Definition store.h:212
bool symbolic_p() const
Definition store.h:214
static int cmp(const binding_key *, const binding_key *)
label_text get_desc(bool simple=true) const
virtual const concrete_binding * dyn_cast_concrete_binding() const
Definition store.h:225
const svalue * get_svalue() const
const_iterator & operator++()
bool operator==(const const_iterator &other) const
bool operator!=(const const_iterator &other) const
Definition store.h:670
concrete_bindings_t::const_iterator m_concrete
Definition store.h:681
const binding_map & m_map
Definition store.h:680
symbolic_bindings_t::const_iterator m_symbolic
Definition store.h:682
const_iterator(const binding_map &map, concrete_bindings_t::const_iterator concrete_iter, symbolic_bindings_t::const_iterator symbolic_iter)
Definition store.h:661
bool operator!=(const iterator &other) const
Definition store.h:699
bool operator==(const iterator &other) const
symbolic_bindings_t::iterator m_symbolic
Definition store.h:712
const binding_map & m_map
Definition store.h:710
iterator(const binding_map &map, concrete_bindings_t::iterator concrete_iter, symbolic_bindings_t::iterator symbolic_iter)
Definition store.h:690
const binding_key * get_key() const
friend class binding_map
Definition store.h:688
concrete_bindings_t::iterator m_concrete
Definition store.h:711
binding_map & operator=(const binding_map &other)
const_iterator_t end() const
concrete_binding_map concrete_bindings_t
Definition store.h:642
void dump_to_pp(pretty_printer *pp, bool simple, bool multiline) const
void get_overlapping_bindings(const binding_key *key, auto_vec< const binding_key * > *out)
bool operator==(const binding_map &other) const
bool empty_p() const
Definition store.h:738
void dump(bool simple) const
class ana::binding_map::iterator iterator_t
store_manager & m_store_mgr
Definition store.h:775
void clear()
Definition store.h:732
binding_map(store_manager &store_mgr)
const symbolic_bindings_t & get_symbolic_bindings() const
Definition store.h:769
symbolic_bindings_t m_symbolic
Definition store.h:777
const_iterator_t begin() const
const svalue * get(const binding_key *key) const
std::unique_ptr< json::object > to_json() const
const concrete_bindings_t & get_concrete_bindings() const
Definition store.h:766
void add_to_tree_widget(text_art::tree_widget &parent_widget, const text_art::dump_widget_info &dwi) const
void put(const binding_key *k, const svalue *v)
class ana::binding_map::const_iterator const_iterator_t
std::vector< symbolic_binding > symbolic_bindings_t
Definition store.h:643
concrete_bindings_t m_concrete
Definition store.h:776
bool operator!=(const binding_map &other) const
Definition store.h:720
void remove_overlapping_bindings(store_manager *mgr, const binding_key *drop_key, uncertainty_t *uncertainty, svalue_set *maybe_live_values, bool always_overlap)
void remove(const binding_key *k)
void overwrite(iterator_t &pos, const svalue *v)
binding_map(const binding_map &other)
Definition call-summary.h:68
iterator find(const bit_range &bits)
Definition store.h:590
const_iterator begin() const
Definition store.h:544
std::map< bit_range, const svalue * > map_t
Definition store.h:526
const_iterator find(const bit_range &bits) const
Definition store.h:585
map_t::const_iterator const_iterator
Definition store.h:527
iterator begin()
Definition store.h:546
static int cmp(const concrete_binding_map &map1, const concrete_binding_map &map2)
void dump(bool simple) const
const svalue * get_any_exact_binding(const bit_range &bits) const
bool operator!=(const concrete_binding_map &other) const
Definition store.h:539
void insert(const byte_range &bytes, const svalue *sval)
Definition store.h:570
std::vector< std::pair< bit_range, const svalue & > > get_overlapping_bindings(const bit_range &bits)
void add_to_tree_widget(text_art::tree_widget &parent_widget, const text_art::dump_widget_info &dwi) const
complexity calc_complexity() const
bool apply_ctor_to_region(const region *parent_reg, tree ctor, region_model_manager *mgr)
const_iterator end() const
Definition store.h:545
map_t m_map
Definition store.h:620
bool apply_ctor_val_to_range(const region *parent_reg, region_model_manager *mgr, tree min_index, tree max_index, tree val)
void remove_overlapping_binding(store_manager *mgr, const bit_range &bits_to_drop, const bit_range &affected_bound_bits, const svalue &old_sval)
iterator end()
Definition store.h:547
void dump_to_pp(pretty_printer *pp, bool simple, bool multiline) const
void remove_overlapping_bindings(store_manager *mgr, const bit_range &bits)
map_t::iterator iterator
Definition store.h:528
bool empty_p() const
Definition store.h:531
bool operator==(const concrete_binding_map &other) const
Definition store.h:534
void erase(const bit_range &bits)
Definition store.h:576
void clear()
Definition store.h:530
size_t size() const
Definition store.h:549
bool apply_ctor_pair_to_child_region(const region *parent_reg, region_model_manager *mgr, tree index, tree val)
void insert(const bit_range &bits, const svalue *sval)
Definition store.h:564
bit_size_t get_size_in_bits() const
Definition store.h:426
bool get_byte_range(byte_range *out) const
void mark_empty()
Definition store.h:441
concrete_binding(bit_offset_t start_bit_offset, bit_size_t size_in_bits)
Definition store.h:401
concrete_binding key_t
Definition store.h:399
const bit_range & get_bit_range() const
Definition store.h:419
void dump_to_pp(pretty_printer *pp, bool simple) const final override
bit_offset_t get_next_bit_offset() const
Definition store.h:431
bool operator==(const concrete_binding &other) const
Definition store.h:409
bool concrete_p() const final override
Definition store.h:406
bit_range m_bit_range
Definition store.h:446
bool is_empty() const
Definition store.h:443
bit_offset_t get_start_bit_offset() const
Definition store.h:422
bool is_deleted() const
Definition store.h:442
void mark_deleted()
Definition store.h:440
bool overlaps_p(const concrete_binding &other) const
hashval_t hash() const
Definition store.h:408
const concrete_binding * dyn_cast_concrete_binding() const final override
Definition store.h:416
static int cmp_ptr_ptr(const void *, const void *)
Definition analyzer-logging.h:36
Definition region-model-manager.h:32
Definition region-model.h:294
consolidation_map< symbolic_binding > m_symbolic_binding_key_mgr
Definition store.h:1077
const concrete_binding * get_concrete_binding(const bit_range &bits)
Definition store.h:1053
const concrete_binding * get_concrete_binding(bit_offset_t start_bit_offset, bit_offset_t size_in_bits)
const concrete_binding * get_concrete_binding(const byte_range &bytes)
Definition store.h:1059
region_model_manager * m_mgr
Definition store.h:1075
logger * get_logger() const
region_model_manager * get_svalue_manager() const
Definition store.h:1067
store_manager(region_model_manager *mgr)
Definition store.h:1044
consolidation_map< concrete_binding > m_concrete_binding_key_mgr
Definition store.h:1076
void log_stats(logger *logger, bool show_objs) const
const symbolic_binding * get_symbolic_binding(const region *region)
std::unique_ptr< json::object > to_json() const
void purge_state_involving(const svalue *sval, region_model_manager *sval_mgr)
void dump(bool simple) const
bool escaped_p(const region *reg) const
store(const store &other)
void fill_region(store_manager *mgr, const region *reg, const svalue *sval)
void purge_region(store_manager *mgr, const region *reg)
tristate eval_alias(const region *base_reg_a, const region *base_reg_b) const
void summarize_to_pp(pretty_printer *pp, bool simple) const
void mark_as_escaped(store_manager &mgr, const region *base_reg)
bool operator==(const store &other) const
store & operator=(const store &other)
void on_maybe_live_values(store_manager &mgr, const svalue_set &maybe_live_values)
hash_map< const region *, binding_cluster * > cluster_map_t
Definition store.h:925
void replay_call_summary_cluster(call_summary_replay &r, const store &summary, const region *base_reg)
cluster_map_t::iterator end() const
Definition store.h:1002
std::unique_ptr< text_art::tree_widget > make_dump_widget(const text_art::dump_widget_info &dwi, store_manager *mgr) const
void get_representative_path_vars(const region_model *model, svalue_set *visited, const svalue *sval, logger *logger, auto_vec< path_var > *out_pvs) const
bool m_called_unknown_fn
Definition store.h:1033
void loop_replay_fixup(const store *other_store, region_model_manager *mgr)
static bool can_merge_p(const store *store_a, const store *store_b, store *out_store, store_manager *mgr, model_merger *merger)
bool operator!=(const store &other) const
Definition store.h:934
bool called_unknown_fn_p() const
Definition store.h:956
void set_value(store_manager *mgr, const region *lhs_reg, const svalue *rhs_sval, uncertainty_t *uncertainty)
cluster_map_t m_cluster_map
Definition store.h:1025
const binding_cluster * get_cluster(const region *base_reg) const
void zero_fill_region(store_manager *mgr, const region *reg)
binding_cluster * get_or_create_cluster(store_manager &store_mgr, const region *base_reg)
tristate eval_alias_1(const region *base_reg_a, const region *base_reg_b) const
void mark_region_as_unknown(store_manager *mgr, const region *reg, uncertainty_t *uncertainty, svalue_set *maybe_live_values)
void canonicalize(store_manager *mgr)
cluster_map_t::iterator begin() const
Definition store.h:1001
const svalue * get_any_binding(store_manager *mgr, const region *reg) const
binding_cluster * get_cluster(const region *base_reg)
void replay_call_summary(call_summary_replay &r, const store &summary)
void dump_to_pp(pretty_printer *pp, bool summarize, bool multiline, store_manager *mgr) const
void purge_cluster(const region *base_reg)
void for_each_cluster(void(*cb)(const region *base_reg, T user_data), T user_data) const
Definition store.h:978
void remove_overlapping_bindings(store_manager *mgr, const region *reg, uncertainty_t *uncertainty)
void clobber_region(store_manager *mgr, const region *reg)
void on_unknown_fncall(const gcall &call, store_manager *mgr, const conjured_purge &p)
void dump_to_pp(pretty_printer *pp, bool simple) const final override
bool is_empty() const
Definition store.h:501
void mark_empty()
Definition store.h:498
bool operator==(const symbolic_binding &other) const
Definition store.h:483
bool concrete_p() const final override
Definition store.h:477
symbolic_binding(const region *region)
Definition store.h:476
symbolic_binding key_t
Definition store.h:474
const symbolic_binding * dyn_cast_symbolic_binding() const final override
Definition store.h:490
const region * get_region() const
Definition store.h:493
bool is_deleted() const
Definition store.h:499
hashval_t hash() const
Definition store.h:479
const region * m_region
Definition store.h:504
static int cmp_ptr_ptr(const void *, const void *)
void mark_deleted()
Definition store.h:497
bool unknown_sm_state_p(const svalue *sval)
Definition store.h:175
void dump(bool simple) const
void dump_to_pp(pretty_printer *pp, bool simple) const
void on_mutable_sval_at_unknown_call(const svalue *sval)
Definition store.h:170
iterator end_maybe_bound_svals() const
Definition store.h:188
hash_set< const svalue * > m_mutable_at_unknown_call_svals
Definition store.h:199
void on_maybe_bound_sval(const svalue *sval)
Definition store.h:166
hash_set< constsvalue * >::iterator iterator
Definition store.h:164
iterator begin_maybe_bound_svals() const
Definition store.h:184
hash_set< const svalue * > m_maybe_bound_svals
Definition store.h:196
Definition hash-set.h:110
hashval_t end() const
Definition inchash.h:49
void add_wide_int(const generic_wide_int< T > &x)
Definition inchash.h:84
Definition pretty-print.h:241
Definition tree-widget.h:32
union tree_node * tree
Definition coretypes.h:97
static struct string2counter_map map[debug_counter_number_of_counters]
Definition dbgcnt.cc:39
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2009
static struct token T
Definition gengtype-parse.cc:45
Definition access-diagram.h:30
offset_int byte_size_t
Definition common.h:207
@ stmt
Definition checker-event.h:38
offset_int bit_offset_t
Definition common.h:204
offset_int byte_offset_t
Definition common.h:206
offset_int bit_size_t
Definition common.h:205
hash_set< const svalue * > svalue_set
Definition common.h:76
poly_int< N, C > r
Definition poly-int.h:774
const binding_key * m_key
Definition store.h:654
binding_pair(const binding_key *key, const svalue *sval)
Definition store.h:647
const svalue * m_sval
Definition store.h:655
const region * m_region
Definition store.h:639
bool operator==(const symbolic_binding &other) const
Definition store.h:633
const svalue * m_sval
Definition store.h:640
bit_range operator-(bit_offset_t offset) const
bool operator==(const bit_range &other) const
Definition store.h:272
std::unique_ptr< json::object > to_json() const
bool exceeds_p(const bit_range &other, bit_range *out_overhanging_bit_range) const
bool empty_p() const
Definition store.h:245
bool intersects_p(const bit_range &other) const
Definition store.h:278
static bool from_mask(unsigned HOST_WIDE_INT mask, bit_range *out)
bool falls_short_of_p(bit_offset_t offset, bit_range *out_fall_short_bits) const
bool operator<(const bit_range &other) const
Definition store.h:304
bool intersects_p(const bit_range &other, bit_range *out_this, bit_range *out_other) const
bit_size_t m_size_in_bits
Definition store.h:322
bool contains_p(bit_offset_t offset) const
Definition store.h:264
bit_offset_t get_next_bit_offset() const
Definition store.h:254
bit_offset_t m_start_bit_offset
Definition store.h:321
bool intersects_p(const bit_range &other, bit_size_t *out_num_overlap_bits) const
void dump_to_pp(pretty_printer *pp) const
bit_range(bit_offset_t start_bit_offset, bit_size_t size_in_bits)
Definition store.h:235
hashval_t hash() const
Definition store.h:313
bool as_byte_range(byte_range *out) const
static int cmp(const bit_range &br1, const bit_range &br2)
bool contains_p(const bit_range &other, bit_range *out) const
bit_offset_t get_start_bit_offset() const
Definition store.h:250
bit_offset_t get_last_bit_offset() const
Definition store.h:258
bool operator==(const byte_range &other) const
Definition store.h:351
byte_offset_t get_next_byte_offset() const
Definition store.h:361
byte_size_t m_size_in_bytes
Definition store.h:389
byte_offset_t get_last_byte_offset() const
Definition store.h:365
bool contains_p(byte_offset_t offset) const
Definition store.h:344
byte_offset_t get_start_byte_offset() const
Definition store.h:357
void dump_to_pp(pretty_printer *pp) const
byte_range(byte_offset_t start_byte_offset, byte_size_t size_in_bytes)
Definition store.h:329
static int cmp(const byte_range &br1, const byte_range &br2)
bit_offset_t get_start_bit_offset() const
Definition store.h:377
byte_offset_t m_start_byte_offset
Definition store.h:388
bool contains_p(const byte_range &other, byte_range *out) const
bool empty_p() const
Definition store.h:339
bit_offset_t get_next_bit_offset() const
Definition store.h:381
std::unique_ptr< json::object > to_json() const
bit_range as_bit_range() const
Definition store.h:371
Definition complexity.h:31
Definition region-model.h:1204
static const bool empty_zero_p
Definition store.h:462
static const bool empty_zero_p
Definition store.h:512
Definition hash-traits.h:466
Definition dump-widget-info.h:31
#define gcc_assert(EXPR)
Definition system.h:817
static bitmap visited
Definition tree-ssa-dce.cc:664
tree size_in_bytes(const_tree t)
Definition tree.h:5283