21#ifndef GCC_ANALYZER_REGION_H
22#define GCC_ANALYZER_REGION_H
396 return reg->get_kind () == RK_FRAME;
402 static const bool empty_zero_p =
true;
428 return reg->get_kind () == RK_GLOBALS;
455 return reg->get_kind () == RK_CODE;
492 return reg->get_kind () == RK_FUNCTION;
526 return reg->get_kind () == RK_LABEL;
553 return reg->get_kind () == RK_STACK;
579 return reg->get_kind () == RK_HEAP;
605 return reg->get_kind () == RK_THREAD_LOCAL;
630 return reg->get_kind () == RK_ROOT;
697 return reg->
get_kind () == RK_SYMBOLIC;
703 static const bool empty_zero_p =
true;
818 const final override;
831 return reg->get_kind () == RK_FIELD;
837 static const bool empty_zero_p =
true;
904 const final override;
917 return reg->
get_kind () == RK_ELEMENT;
923 static const bool empty_zero_p =
true;
991 const final override;
1004 return reg->
get_kind () == RK_OFFSET;
1010 static const bool empty_zero_p =
true;
1100 return reg->
get_kind () == RK_SIZED;
1106 static const bool empty_zero_p =
true;
1181 return reg->
get_kind () == RK_CAST;
1187 static const bool empty_zero_p =
true;
1256 return reg->get_kind () == RK_STRING;
1326 const final override;
1339 return reg->get_kind () == RK_BIT_RANGE;
1345 static const bool empty_zero_p =
true;
1420 return reg->get_kind () == RK_VAR_ARG;
1426 static const bool empty_zero_p =
true;
1452 return reg->get_kind () == RK_ERRNO;
1488 return reg->get_kind () == RK_PRIVATE;
alloca_region(symbol::id_t id, const frame_region *parent)
Definition region.h:1213
void dump_to_pp(pretty_printer *pp, bool simple) const final override
enum region_kind get_kind() const final override
Definition region.h:1217
bool get_relative_concrete_offset(bit_offset_t *out) const final override
bit_range_region(symbol::id_t id, const region *parent, tree type, const bit_range &bits)
Definition region.h:1305
enum region_kind get_kind() const final override
Definition region.h:1314
bool get_byte_size(byte_size_t *out) const final override
const svalue * get_bit_size_sval(region_model_manager *mgr) const final override
const bit_range_region * dyn_cast_bit_range_region() const final override
Definition region.h:1312
bool get_bit_size(bit_size_t *out) const final override
bit_range m_bits
Definition region.h:1329
const svalue * get_byte_size_sval(region_model_manager *mgr) const final override
const svalue * get_relative_symbolic_offset(region_model_manager *mgr) const final override
void dump_to_pp(pretty_printer *pp, bool simple) const final override
const bit_range & get_bits() const
Definition region.h:1318
void dump_to_pp(pretty_printer *pp, bool simple) const final override
const region * m_original_region
Definition region.h:1171
const cast_region * dyn_cast_cast_region() const final override
Definition region.h:1162
enum region_kind get_kind() const final override
Definition region.h:1160
cast_region(symbol::id_t id, const region *original_region, tree type)
Definition region.h:1154
const region * get_original_region() const
Definition region.h:1168
bool get_relative_concrete_offset(bit_offset_t *out) const final override
void accept(visitor *v) const final override
code_region(symbol::id_t id, const region *parent)
Definition region.h:439
enum region_kind get_kind() const final override
Definition region.h:445
void dump_to_pp(pretty_printer *pp, bool simple) const final override
const decl_region * dyn_cast_decl_region() const final override
Definition region.h:723
const svalue * get_svalue_for_initializer(region_model_manager *mgr) const
const svalue * get_svalue_for_constructor(tree ctor, region_model_manager *mgr) const
decl_region(symbol::id_t id, const region *parent, tree decl)
Definition region.h:715
tree m_decl
Definition region.h:742
static bool calc_tracked_p(tree decl)
const svalue * maybe_get_constant_value(region_model_manager *mgr) const
const svalue * calc_svalue_for_constructor(tree ctor, region_model_manager *mgr) const
bool m_tracked
Definition region.h:748
enum region_kind get_kind() const final override
Definition region.h:721
int get_stack_depth() const
void dump_to_pp(pretty_printer *pp, bool simple) const final override
const svalue * m_ctor_svalue
Definition region.h:751
bool tracked_p() const final override
Definition region.h:727
tree get_decl() const
Definition region.h:729
const svalue * m_index
Definition region.h:907
const element_region * dyn_cast_element_region() const final override
Definition region.h:893
element_region(symbol::id_t id, const region *parent, tree element_type, const svalue *index)
Definition region.h:885
void accept(visitor *v) const final override
const svalue * get_index() const
Definition region.h:899
void dump_to_pp(pretty_printer *pp, bool simple) const final override
virtual bool get_relative_concrete_offset(bit_offset_t *out) const final override
const svalue * get_relative_symbolic_offset(region_model_manager *mgr) const final override
enum region_kind get_kind() const final override
Definition region.h:891
enum region_kind get_kind() const final override
Definition region.h:1440
errno_region(symbol::id_t id, const thread_local_region *parent)
Definition region.h:1436
void dump_to_pp(pretty_printer *pp, bool simple) const final override
tree get_field() const
Definition region.h:814
void dump_to_pp(pretty_printer *pp, bool simple) const final override
enum region_kind get_kind() const final override
Definition region.h:808
tree m_field
Definition region.h:821
const svalue * get_relative_symbolic_offset(region_model_manager *mgr) const final override
bool get_relative_concrete_offset(bit_offset_t *out) const final override
const field_region * dyn_cast_field_region() const final override
Definition region.h:812
field_region(symbol::id_t id, const region *parent, tree field)
Definition region.h:803
int get_index() const
Definition region.h:364
void accept(visitor *v) const final override
const function & m_fun
Definition region.h:379
unsigned get_num_locals() const
Definition region.h:372
enum region_kind get_kind() const final override
Definition region.h:352
const frame_region * m_calling_frame
Definition region.h:378
const decl_region * get_region_for_local(region_model_manager *mgr, tree expr, const region_model_context *ctxt) const
const frame_region * dyn_cast_frame_region() const final override
Definition region.h:353
const frame_region * get_calling_frame() const
Definition region.h:361
map_t m_locals
Definition region.h:386
void dump_untracked_regions() const
tree get_fndecl() const
Definition region.h:363
const function & get_function() const
Definition region.h:362
void dump_to_pp(pretty_printer *pp, bool simple) const final override
frame_region(symbol::id_t id, const region *parent, const frame_region *calling_frame, const function &fun, int index)
Definition region.h:343
hash_map< tree, decl_region * > map_t
Definition region.h:385
int m_index
Definition region.h:380
int get_stack_depth() const
Definition region.h:365
function_region(symbol::id_t id, const code_region *parent, tree fndecl)
Definition region.h:466
tree m_fndecl
Definition region.h:482
const function_region * dyn_cast_function_region() const final override
Definition region.h:477
enum region_kind get_kind() const final override
Definition region.h:475
tree get_fndecl() const
Definition region.h:479
void dump_to_pp(pretty_printer *pp, bool simple) const final override
enum region_kind get_kind() const final override
Definition region.h:417
void dump_to_pp(pretty_printer *pp, bool simple) const final override
globals_region(symbol::id_t id, const region *parent)
Definition region.h:412
enum region_kind get_kind() const final override
Definition region.h:1203
heap_allocated_region(symbol::id_t id, const region *parent)
Definition region.h:1198
void dump_to_pp(pretty_printer *pp, bool simple) const final override
void dump_to_pp(pretty_printer *pp, bool simple) const final override
enum region_kind get_kind() const final override
Definition region.h:568
heap_region(symbol::id_t id, region *parent)
Definition region.h:564
label_region(symbol::id_t id, const function_region *parent, tree label)
Definition region.h:503
tree get_label() const
Definition region.h:513
void dump_to_pp(pretty_printer *pp, bool simple) const final override
tree m_label
Definition region.h:516
enum region_kind get_kind() const final override
Definition region.h:511
bool get_relative_concrete_offset(bit_offset_t *out) const final override
enum region_kind get_kind() const final override
Definition region.h:978
const svalue * get_relative_symbolic_offset(region_model_manager *mgr) const final override
const svalue * get_byte_offset() const
Definition region.h:986
void dump_to_pp(pretty_printer *pp, bool simple) const final override
void accept(visitor *v) const final override
const svalue * get_bit_offset(region_model_manager *mgr) const
const svalue * m_byte_offset
Definition region.h:994
const offset_region * dyn_cast_offset_region() const final override
Definition region.h:980
offset_region(symbol::id_t id, const region *parent, tree type, const svalue *byte_offset)
Definition region.h:972
enum region_kind get_kind() const final override
Definition region.h:1473
void dump_to_pp(pretty_printer *pp, bool simple) const final override
private_region(unsigned id, const region *parent, tree type, const char *desc)
Definition region.h:1467
const char * m_desc
Definition region.h:1478
Definition region-model.h:702
Definition region-model-manager.h:32
Definition region-model.h:258
Definition analyzer.h:192
virtual const var_arg_region * dyn_cast_var_arg_region() const
Definition region.h:153
bool maybe_print_for_user(pretty_printer *pp, const region_model &model) const
bool is_named_decl_p(const char *decl_name) const
bool symbolic_for_unknown_ptr_p() const
region_offset calc_offset(region_model_manager *mgr) const
void get_subregions_for_binding(region_model_manager *mgr, bit_offset_t start_bit_offset, bit_size_t size_in_bits, tree type, auto_vec< const region * > *out) const
bool involves_p(const svalue *sval) const
json::value * to_json() const
virtual const offset_region * dyn_cast_offset_region() const
Definition region.h:143
virtual const frame_region * dyn_cast_frame_region() const
Definition region.h:131
virtual const string_region * dyn_cast_string_region() const
Definition region.h:149
virtual const symbolic_region * dyn_cast_symbolic_region() const
Definition region.h:135
const frame_region * maybe_get_frame_region() const
bool can_have_initial_svalue_p() const
virtual const sized_region * dyn_cast_sized_region() const
Definition region.h:145
const region * get_base_region() const
static int cmp_ptr_ptr(const void *, const void *)
bool descendent_of_p(const region *elder) const
tree get_type() const
Definition region.h:168
virtual bool tracked_p() const
Definition region.h:247
const region * m_parent
Definition region.h:260
const svalue * calc_initial_value_at_main(region_model_manager *mgr) const
virtual bool get_relative_concrete_offset(bit_offset_t *out) const
const region * get_parent_region() const
Definition region.h:157
virtual const svalue * get_byte_size_sval(region_model_manager *mgr) const
region_offset get_offset(region_model_manager *mgr) const
bool base_region_p() const
virtual const element_region * dyn_cast_element_region() const
Definition region.h:141
virtual const field_region * dyn_cast_field_region() const
Definition region.h:139
virtual bool get_byte_size(byte_size_t *out) const
enum memory_space get_memory_space() const
void print(const region_model &model, pretty_printer *pp) const
virtual const svalue * get_relative_symbolic_offset(region_model_manager *mgr) const
region(complexity c, symbol::id_t id, const region *parent, tree type)
virtual enum region_kind get_kind() const =0
const svalue * get_initial_value_at_main(region_model_manager *mgr) const
label_text get_desc(bool simple=true) const
tree maybe_get_decl() const
virtual const decl_region * dyn_cast_decl_region() const
Definition region.h:137
virtual void accept(visitor *v) const
const svalue * m_cached_init_sval_at_main
Definition region.h:267
virtual const function_region * dyn_cast_function_region() const
Definition region.h:133
virtual const svalue * get_bit_size_sval(region_model_manager *mgr) const
region_offset * m_cached_offset
Definition region.h:263
tree m_type
Definition region.h:261
virtual void dump_to_pp(pretty_printer *pp, bool simple) const =0
virtual bool get_bit_size(bit_size_t *out) const
virtual const bit_range_region * dyn_cast_bit_range_region() const
Definition region.h:151
virtual const cast_region * dyn_cast_cast_region() const
Definition region.h:147
void dump(bool simple) const
region_offset get_next_offset(region_model_manager *mgr) const
bool get_relative_concrete_byte_range(byte_range *out) const
enum region_kind get_kind() const final override
Definition region.h:619
void dump_to_pp(pretty_printer *pp, bool simple) const final override
root_region(symbol::id_t id)
const svalue * m_byte_size_sval
Definition region.h:1090
bool get_bit_size(bit_size_t *out) const final override
bool get_byte_size(byte_size_t *out) const final override
const sized_region * dyn_cast_sized_region() const final override
Definition region.h:1071
const svalue * get_byte_size_sval(region_model_manager *) const final override
Definition region.h:1081
enum region_kind get_kind() const final override
Definition region.h:1069
sized_region(symbol::id_t id, const region *parent, tree type, const svalue *byte_size_sval)
Definition region.h:1062
const svalue * get_bit_size_sval(region_model_manager *) const final override
void dump_to_pp(pretty_printer *pp, bool simple) const final override
void accept(visitor *v) const final override
space_region(symbol::id_t id, const region *parent)
Definition region.h:288
void dump_to_pp(pretty_printer *pp, bool simple) const final override
stack_region(symbol::id_t id, region *parent)
Definition region.h:537
enum region_kind get_kind() const final override
Definition region.h:543
const string_region * dyn_cast_string_region() const final override
Definition region.h:1233
bool tracked_p() const final override
Definition region.h:1241
tree get_string_cst() const
Definition region.h:1243
enum region_kind get_kind() const final override
Definition region.h:1235
void dump_to_pp(pretty_printer *pp, bool simple) const final override
tree m_string_cst
Definition region.h:1246
string_region(symbol::id_t id, const region *parent, tree string_cst)
Definition region.h:1227
virtual enum svalue_kind get_kind() const =0
unsigned id_t
Definition symbol.h:33
void dump_to_pp(pretty_printer *pp, bool simple) const final override
symbolic_region(symbol::id_t id, region *parent, const svalue *sval_ptr)
const svalue * get_pointer() const
Definition region.h:684
const symbolic_region * dyn_cast_symbolic_region() const final override
Definition region.h:678
enum region_kind get_kind() const final override
Definition region.h:680
const svalue * m_sval_ptr
Definition region.h:687
void accept(visitor *v) const final override
void dump_to_pp(pretty_printer *pp, bool simple) const final override
thread_local_region(symbol::id_t id, region *parent)
Definition region.h:590
enum region_kind get_kind() const final override
Definition region.h:594
enum region_kind get_kind() const final override
Definition region.h:1502
void dump_to_pp(pretty_printer *pp, bool simple) const final override
unknown_region(symbol::id_t id, const region *parent, tree type)
Definition region.h:1498
unsigned m_idx
Definition region.h:1410
var_arg_region(symbol::id_t id, const frame_region *parent, unsigned idx)
Definition region.h:1393
const var_arg_region * dyn_cast_var_arg_region() const final override
Definition region.h:1400
const frame_region * get_frame_region() const
void dump_to_pp(pretty_printer *pp, bool simple) const final override
enum region_kind get_kind() const final override
Definition region.h:1402
unsigned get_index() const
Definition region.h:1407
Definition region-model.h:217
Definition genmatch.cc:845
size_t elements() const
Definition hash-map.h:247
Definition pretty-print.h:244
union tree_node * tree
Definition coretypes.h:97
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2002
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
Definition access-diagram.h:30
offset_int byte_size_t
Definition analyzer.h:182
offset_int bit_offset_t
Definition analyzer.h:179
offset_int bit_size_t
Definition analyzer.h:180
region_kind
Definition region.h:46
@ RK_UNKNOWN
Definition region.h:70
@ RK_STACK
Definition region.h:52
@ RK_PRIVATE
Definition region.h:69
@ RK_LABEL
Definition region.h:51
@ RK_CAST
Definition region.h:62
@ RK_FIELD
Definition region.h:58
@ RK_FRAME
Definition region.h:47
@ RK_DECL
Definition region.h:57
@ RK_ERRNO
Definition region.h:68
@ RK_ELEMENT
Definition region.h:59
@ RK_SYMBOLIC
Definition region.h:56
@ RK_BIT_RANGE
Definition region.h:66
@ RK_ALLOCA
Definition region.h:64
@ RK_SIZED
Definition region.h:61
@ RK_HEAP_ALLOCATED
Definition region.h:63
@ RK_THREAD_LOCAL
Definition region.h:54
@ RK_CODE
Definition region.h:49
@ RK_GLOBALS
Definition region.h:48
@ RK_OFFSET
Definition region.h:60
@ RK_ROOT
Definition region.h:55
@ RK_FUNCTION
Definition region.h:50
@ RK_HEAP
Definition region.h:53
@ RK_VAR_ARG
Definition region.h:67
@ RK_STRING
Definition region.h:65
memory_space
Definition region.h:31
@ MEMSPACE_GLOBALS
Definition region.h:34
@ MEMSPACE_READONLY_DATA
Definition region.h:37
@ MEMSPACE_HEAP
Definition region.h:36
@ MEMSPACE_PRIVATE
Definition region.h:39
@ MEMSPACE_THREAD_LOCAL
Definition region.h:38
@ MEMSPACE_STACK
Definition region.h:35
@ MEMSPACE_CODE
Definition region.h:33
@ MEMSPACE_UNKNOWN
Definition region.h:32
void mark_deleted()
Definition region.h:1292
bit_range m_bits
Definition region.h:1302
const region * m_parent
Definition region.h:1300
bool is_empty() const
Definition region.h:1298
hashval_t hash() const
Definition region.h:1275
bool is_deleted() const
Definition region.h:1294
key_t(const region *parent, tree type, const bit_range &bits)
Definition region.h:1269
void mark_empty()
Definition region.h:1293
tree m_type
Definition region.h:1301
bool operator==(const key_t &other) const
Definition region.h:1285
bit_size_t m_size_in_bits
Definition store.h:301
bit_offset_t m_start_bit_offset
Definition store.h:300
key_t(const region *original_region, tree type)
Definition region.h:1119
const region * m_original_region
Definition region.h:1150
void mark_empty()
Definition region.h:1143
bool is_deleted() const
Definition region.h:1144
tree m_type
Definition region.h:1151
bool operator==(const key_t &other) const
Definition region.h:1133
bool is_empty() const
Definition region.h:1148
hashval_t hash() const
Definition region.h:1125
void mark_deleted()
Definition region.h:1139
Definition complexity.h:31
bool operator==(const key_t &other) const
Definition region.h:865
const svalue * m_index
Definition region.h:882
void mark_empty()
Definition region.h:873
bool is_deleted() const
Definition region.h:874
const region * m_parent
Definition region.h:880
key_t(const region *parent, tree element_type, const svalue *index)
Definition region.h:850
tree m_element_type
Definition region.h:881
bool is_empty() const
Definition region.h:878
void mark_deleted()
Definition region.h:872
hashval_t hash() const
Definition region.h:856
void mark_deleted()
Definition region.h:794
hashval_t hash() const
Definition region.h:781
bool is_deleted() const
Definition region.h:796
const region * m_parent
Definition region.h:799
bool is_empty() const
Definition region.h:797
bool operator==(const key_t &other) const
Definition region.h:789
tree m_field
Definition region.h:800
key_t(const region *parent, tree field)
Definition region.h:775
void mark_empty()
Definition region.h:795
key_t(const frame_region *calling_frame, const function &fun)
Definition region.h:311
bool is_empty() const
Definition region.h:337
bool is_deleted() const
Definition region.h:333
void mark_empty()
Definition region.h:332
bool operator==(const key_t &other) const
Definition region.h:325
void mark_deleted()
Definition region.h:331
hashval_t hash() const
Definition region.h:317
const frame_region * m_calling_frame
Definition region.h:339
const function * m_fun
Definition region.h:340
key_t(const region *parent, tree element_type, const svalue *byte_offset)
Definition region.h:937
const region * m_parent
Definition region.h:967
bool is_empty() const
Definition region.h:965
bool operator==(const key_t &other) const
Definition region.h:952
hashval_t hash() const
Definition region.h:943
tree m_element_type
Definition region.h:968
bool is_deleted() const
Definition region.h:961
void mark_empty()
Definition region.h:960
const svalue * m_byte_offset
Definition region.h:969
void mark_deleted()
Definition region.h:959
const svalue * m_end_offset
Definition region.h:1059
key_t(const region *parent, tree element_type, const svalue *byte_size_sval)
Definition region.h:1024
const region * m_parent
Definition region.h:1056
void mark_deleted()
Definition region.h:1048
bool is_empty() const
Definition region.h:1054
bool operator==(const key_t &other) const
Definition region.h:1041
const svalue * m_byte_size_sval
Definition region.h:1058
tree m_element_type
Definition region.h:1057
hashval_t hash() const
Definition region.h:1032
void mark_empty()
Definition region.h:1049
bool is_deleted() const
Definition region.h:1050
const svalue * m_sval_ptr
Definition region.h:672
bool is_empty() const
Definition region.h:669
const region * m_parent
Definition region.h:671
void mark_deleted()
Definition region.h:663
void mark_empty()
Definition region.h:664
hashval_t hash() const
Definition region.h:650
key_t(const region *parent, const svalue *sval_ptr)
Definition region.h:644
bool operator==(const key_t &other) const
Definition region.h:658
bool is_deleted() const
Definition region.h:665
bool is_deleted() const
Definition region.h:1383
const frame_region * m_parent
Definition region.h:1389
unsigned m_idx
Definition region.h:1390
bool operator==(const key_t &other) const
Definition region.h:1372
bool is_empty() const
Definition region.h:1387
void mark_empty()
Definition region.h:1382
void mark_deleted()
Definition region.h:1378
hashval_t hash() const
Definition region.h:1364
key_t(const frame_region *parent, unsigned idx)
Definition region.h:1358
Definition genautomata.cc:499
Definition hash-traits.h:466
Definition function.h:249
tree decl
Definition function.h:280
Definition collect2.cc:168
Definition analyzer.h:508
Definition gengtype.h:252
#define NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:821
#define TREE_CODE(NODE)
Definition tree.h:324
#define FUNC_OR_METHOD_TYPE_P(NODE)
Definition tree.h:721
#define TREE_TYPE(NODE)
Definition tree.h:512
#define NULL_TREE
Definition tree.h:317
#define integer_type_node
Definition tree.h:4636