21#ifndef GCC_ANALYZER_REGION_MODEL_H
22#define GCC_ANALYZER_REGION_MODEL_H
53 void put (T src, T dst);
81 m_src_to_dst[src.as_int ()] = dst;
92 return m_src_to_dst[src.as_int ()];
108 T src (T::from_int (
i));
135 *
id = get_dst_for_src (*
id);
154 return !(*
this == other);
270 return !(*
this == other);
341 std::unique_ptr<rejected_constraint> *out);
416 std::unique_ptr<rejected_constraint> *out);
600 std::unique_ptr<rejected_constraint> *out);
604 std::unique_ptr<rejected_constraint> *out);
610 std::unique_ptr<rejected_constraint> *out);
707 virtual bool warn (std::unique_ptr<pending_diagnostic> d,
712 virtual void add_note (std::unique_ptr<pending_note>
pn) = 0;
773 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
829 bool warn (std::unique_ptr<pending_diagnostic>,
831 void add_note (std::unique_ptr<pending_note>)
override;
832 void add_event (std::unique_ptr<checker_event>)
override;
863 void bifurcate (std::unique_ptr<custom_edge_info> info)
override;
872 std::unique_ptr<sm_context> *)
override
910 bool warn (std::unique_ptr<pending_diagnostic> d,
949 const svalue *rhs)
override
1007 void bifurcate (std::unique_ptr<custom_edge_info> info)
override
1090 bool warn (std::unique_ptr<pending_diagnostic> d,
1260 bool warn (std::unique_ptr<pending_diagnostic> d,
1267 unsigned get_num_diagnostics ()
const {
return m_diagnostics.length (); }
1284#define ADD_SAT_CONSTRAINT(MODEL, LHS, OP, RHS) \
1285 SELFTEST_BEGIN_STMT \
1286 bool sat = (MODEL).add_constraint (LHS, OP, RHS, NULL); \
1287 ASSERT_TRUE (sat); \
1293#define ADD_UNSAT_CONSTRAINT(MODEL, LHS, OP, RHS) \
1294 SELFTEST_BEGIN_STMT \
1295 bool sat = (MODEL).add_constraint (LHS, OP, RHS, NULL); \
1296 ASSERT_FALSE (sat); \
1314#define ASSERT_CONDITION_TRUE(REGION_MODEL, LHS, OP, RHS) \
1315 SELFTEST_BEGIN_STMT \
1316 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1317 tristate (tristate::TS_TRUE)); \
1323#define ASSERT_CONDITION_FALSE(REGION_MODEL, LHS, OP, RHS) \
1324 SELFTEST_BEGIN_STMT \
1325 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1326 tristate (tristate::TS_FALSE)); \
1332#define ASSERT_CONDITION_UNKNOWN(REGION_MODEL, LHS, OP, RHS) \
1333 SELFTEST_BEGIN_STMT \
1334 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1335 tristate (tristate::TS_UNKNOWN)); \
Definition region-model.h:1088
virtual void add_annotations()=0
annotating_context(region_model_context *inner)
Definition region-model.h:1106
bool warn(std::unique_ptr< pending_diagnostic > d, const stmt_finder *custom_finder) override
Definition region-model.h:1090
Definition constraint-manager.h:175
Definition analyzer.h:298
Definition call-details.h:29
Definition call-summary.h:68
Definition supergraph.h:446
Definition supergraph.h:515
Definition constraint-manager.h:408
Definition region-model.h:1225
known_function_manager * get_known_function_manager()
Definition region-model.h:1230
const supergraph * get_supergraph()
Definition region-model.h:1228
const supergraph * m_sg
Definition region-model.h:1238
region_model_manager * get_model_manager()
Definition region-model.h:1229
engine(const supergraph *sg=NULL, logger *logger=NULL)
void log_stats(logger *logger) const
region_model_manager m_mgr
Definition region-model.h:1239
Definition exploded-graph.h:791
Definition exploded-graph.h:203
Definition program-state.h:29
Definition program-point.h:73
Definition known-function-manager.h:41
Definition analyzer.h:278
Definition analyzer-logging.h:34
Definition region-model.h:827
bool get_state_map_by_name(const char *, sm_state_map **, const state_machine **, unsigned *, std::unique_ptr< sm_context > *) override
Definition region-model.h:868
bool checking_for_infinite_loop_p() const override
Definition region-model.h:880
bool warn(std::unique_ptr< pending_diagnostic >, const stmt_finder *) override
Definition region-model.h:829
void maybe_did_work() override
Definition region-model.h:879
uncertainty_t * get_uncertainty() override
Definition region-model.h:859
void on_unexpected_tree_code(tree, const dump_location_t &) override
Definition region-model.h:855
void on_unknown_change(const svalue *sval, bool is_mutable) override
Definition region-model.h:847
void on_pop_frame(const frame_region *) override
Definition region-model.h:846
void on_phi(const gphi *phi, tree rhs) override
Definition region-model.h:851
void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) override
Definition region-model.h:837
void add_event(std::unique_ptr< checker_event >) override
void on_liveness_change(const svalue_set &, const region_model *) override
Definition region-model.h:834
logger * get_logger() override
Definition region-model.h:836
void on_escaped_function(tree) override
Definition region-model.h:857
const exploded_graph * get_eg() const override
Definition region-model.h:878
const gimple * get_stmt() const override
Definition region-model.h:877
void on_unusable_in_infinite_loop() override
Definition region-model.h:881
void on_svalue_leak(const svalue *) override
Definition region-model.h:833
void add_note(std::unique_ptr< pending_note >) override
void purge_state_involving(const svalue *sval) override
Definition region-model.h:861
const extrinsic_state * get_ext_state() const override
Definition region-model.h:866
void terminate_path() override
void on_bounded_ranges(const svalue &, const bounded_ranges &) override
Definition region-model.h:842
void bifurcate(std::unique_ptr< custom_edge_info > info) override
Definition region-model.h:50
void put(T src, T dst)
Definition region-model.h:79
void dump() const
Definition region-model.h:121
T get_dst_for_src(T src) const
Definition region-model.h:88
void dump_to_pp(pretty_printer *pp) const
Definition region-model.h:99
auto_vec< T > m_src_to_dst
Definition region-model.h:60
void update(T *) const
Definition region-model.h:133
one_way_id_map(int num_ids)
Definition region-model.h:68
Definition analyzer.h:154
Definition program-point.h:175
const function_point & get_function_point() const
Definition program-point.h:202
Definition program-state.h:203
Definition region-model.h:908
region_model_context * m_inner
Definition region-model.h:1081
const exploded_graph * get_eg() const override
Definition region-model.h:1049
void on_bounded_ranges(const svalue &sval, const bounded_ranges &ranges) override
Definition region-model.h:955
void on_phi(const gphi *phi, tree rhs) override
Definition region-model.h:974
void add_event(std::unique_ptr< checker_event > event) override
const extrinsic_state * get_ext_state() const override
Definition region-model.h:1019
void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) override
Definition region-model.h:947
const gimple * get_stmt() const override
Definition region-model.h:1041
void maybe_did_work() override
Definition region-model.h:1057
void on_pop_frame(const frame_region *frame_reg) override
Definition region-model.h:962
uncertainty_t * get_uncertainty() override
Definition region-model.h:993
void bifurcate(std::unique_ptr< custom_edge_info > info) override
Definition region-model.h:1007
void add_note(std::unique_ptr< pending_note > pn) override
Definition region-model.h:919
void on_svalue_leak(const svalue *sval) override
Definition region-model.h:926
bool checking_for_infinite_loop_p() const override
Definition region-model.h:1063
logger * get_logger() override
Definition region-model.h:939
region_model_context_decorator(region_model_context *inner)
Definition region-model.h:1076
void purge_state_involving(const svalue *sval) override
Definition region-model.h:1001
void on_liveness_change(const svalue_set &live_svalues, const region_model *model) override
Definition region-model.h:932
bool warn(std::unique_ptr< pending_diagnostic > d, const stmt_finder *custom_finder) override
Definition region-model.h:910
void on_unexpected_tree_code(tree t, const dump_location_t &loc) override
Definition region-model.h:980
void on_escaped_function(tree fndecl) override
Definition region-model.h:987
void terminate_path() override
Definition region-model.h:1013
void on_unknown_change(const svalue *sval, bool is_mutable) override
Definition region-model.h:968
void on_unusable_in_infinite_loop() override
Definition region-model.h:1069
bool get_state_map_by_name(const char *name, sm_state_map **out_smap, const state_machine **out_sm, unsigned *out_sm_idx, std::unique_ptr< sm_context > *out_sm_context) override
Definition region-model.h:1027
Definition region-model.h:702
virtual void on_bounded_ranges(const svalue &sval, const bounded_ranges &ranges)=0
virtual void bifurcate(std::unique_ptr< custom_edge_info > info)=0
virtual void purge_state_involving(const svalue *sval)=0
virtual void on_escaped_function(tree fndecl)=0
virtual bool warn(std::unique_ptr< pending_diagnostic > d, const stmt_finder *custom_finder=NULL)=0
bool get_malloc_map(sm_state_map **out_smap, const state_machine **out_sm, unsigned *out_sm_idx)
Definition region-model.h:798
virtual void on_pop_frame(const frame_region *)=0
virtual void on_liveness_change(const svalue_set &live_svalues, const region_model *model)=0
bool get_fd_map(sm_state_map **out_smap, const state_machine **out_sm, unsigned *out_sm_idx, std::unique_ptr< sm_context > *out_sm_context)
Definition region-model.h:790
virtual void add_note(std::unique_ptr< pending_note > pn)=0
virtual logger * get_logger()=0
virtual const extrinsic_state * get_ext_state() const =0
bool possibly_tainted_p(const svalue *sval)
virtual void on_unexpected_tree_code(tree t, const dump_location_t &loc)=0
virtual void on_phi(const gphi *phi, tree rhs)=0
bool get_taint_map(sm_state_map **out_smap, const state_machine **out_sm, unsigned *out_sm_idx)
Definition region-model.h:804
virtual void on_svalue_leak(const svalue *sval)=0
virtual void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs)=0
virtual void on_unusable_in_infinite_loop()=0
virtual const exploded_graph * get_eg() const =0
virtual void on_unknown_change(const svalue *sval, bool is_mutable)=0
virtual const gimple * get_stmt() const =0
virtual uncertainty_t * get_uncertainty()=0
virtual bool checking_for_infinite_loop_p() const =0
virtual void terminate_path()=0
virtual bool get_state_map_by_name(const char *name, sm_state_map **out_smap, const state_machine **out_sm, unsigned *out_sm_idx, std::unique_ptr< sm_context > *out_sm_context)=0
virtual void add_event(std::unique_ptr< checker_event > event)=0
virtual void maybe_did_work()=0
Definition region-model-manager.h:32
bounded_ranges_manager * get_range_manager() const
Definition region-model-manager.h:151
known_function_manager * get_known_function_manager()
Definition region-model-manager.h:153
Definition region-model.h:258
void pop_frame(tree result_lvalue, const svalue **out_result, region_model_context *ctxt, bool eval_return_svalue=true)
region_model(const region_model &other)
void impl_deallocation_call(const call_details &cd)
void update_for_phis(const supernode *snode, const cfg_superedge *last_cfg_superedge, region_model_context *ctxt)
void update_for_zero_return(const call_details &cd, bool unmergeable)
bool add_constraint(tree lhs, enum tree_code op, tree rhs, region_model_context *ctxt)
store * get_store()
Definition region-model.h:443
constraint_manager * get_constraints()
Definition region-model.h:438
void update_for_nonzero_return(const call_details &cd)
bool on_call_pre(const gcall *stmt, region_model_context *ctxt)
bool add_constraint(tree lhs, enum tree_code op, tree rhs, region_model_context *ctxt, std::unique_ptr< rejected_constraint > *out)
void dump(FILE *fp, bool simple, bool multiline) const
bool replay_call_summary(call_summary_replay &r, const region_model &summary)
void update_for_gcall(const gcall *call_stmt, region_model_context *ctxt, function *callee=NULL)
bool apply_constraints_for_gcond(const cfg_superedge &edge, const gcond *cond_stmt, region_model_context *ctxt, std::unique_ptr< rejected_constraint > *out)
bool apply_constraints_for_gswitch(const switch_cfg_superedge &edge, const gswitch *switch_stmt, region_model_context *ctxt, std::unique_ptr< rejected_constraint > *out)
void check_region_size(const region *lhs_reg, const svalue *rhs_sval, region_model_context *ctxt) const
void zero_fill_region(const region *reg, region_model_context *ctxt)
path_var get_representative_path_var(const svalue *sval, svalue_set *visited) const
void on_asm_stmt(const gasm *asm_stmt, region_model_context *ctxt)
bool check_region_access(const region *reg, enum access_direction dir, const svalue *sval_hint, region_model_context *ctxt) const
bool can_merge_with_p(const region_model &other_model, const program_point &point, region_model *out_model, const extrinsic_state *ext_state=NULL, const program_state *state_a=NULL, const program_state *state_b=NULL) const
void check_one_function_attr_null_terminated_string_arg(const gcall *call, tree callee_fndecl, region_model_context *ctxt, rdwr_map &rdwr_idx, tree attr)
bounded_ranges_manager * get_range_manager() const
Definition region-model.h:458
void dump(bool simple) const
tree get_representative_tree(const region *reg) const
path_var get_representative_path_var(const region *reg, svalue_set *visited) const
static void append_regions_cb(const region *base_reg, struct append_regions_cb_data *data)
const region * deref_rvalue(const svalue *ptr_sval, tree ptr_tree, region_model_context *ctxt, bool add_nonnull_constraint=true) const
void on_realloc_with_move(const call_details &cd, const svalue *old_ptr_sval, const svalue *new_ptr_sval)
constraint_manager * m_constraints
Definition region-model.h:682
const svalue * check_for_null_terminated_string_arg(const call_details &cd, unsigned idx) const
void set_errno(const call_details &cd)
void set_dynamic_extents(const region *reg, const svalue *size_in_bytes, region_model_context *ctxt)
void update_for_return_superedge(const return_superedge &return_edge, region_model_context *ctxt)
void check_region_for_write(const region *dest_reg, const svalue *sval_hint, region_model_context *ctxt) const
const svalue * get_dynamic_extents(const region *reg) const
void clobber_region(const region *reg)
void dump_to_pp(pretty_printer *pp, bool simple, bool multiline) const
void transition_ptr_sval_non_null(region_model_context *ctxt, const svalue *new_ptr_sval)
const svalue * get_rvalue_1(path_var pv, region_model_context *ctxt) const
tristate eval_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) const
const svalue * check_for_null_terminated_string_arg(const call_details &cd, unsigned idx, bool include_terminator, const svalue **out_sval) const
void mark_as_tainted(const svalue *sval, region_model_context *ctxt)
const svalue * get_capacity(const region *reg) const
path_var get_representative_path_var_1(const region *reg, svalue_set *visited) const
bool add_constraint(const svalue *lhs, enum tree_code op, const svalue *rhs, region_model_context *ctxt)
tree get_representative_tree(const svalue *sval) const
void check_function_attrs(const gcall *call, tree callee_fndecl, region_model_context *ctxt)
void on_assignment(const gassign *stmt, region_model_context *ctxt)
tristate symbolic_greater_than(const binop_svalue *a, const svalue *b) const
region_model & operator=(const region_model &other)
const frame_region * get_frame_at_index(int index) const
store m_store
Definition region-model.h:680
void print(pretty_printer *pp) const
const region * create_region_for_alloca(const svalue *size_in_bytes, region_model_context *ctxt)
void purge_region(const region *reg)
bool operator!=(const region_model &other) const
Definition region-model.h:268
const svalue * get_store_value(const region *reg, region_model_context *ctxt) const
const region * get_region_for_poisoned_expr(tree expr) const
void get_regions_for_current_frame(auto_vec< const decl_region * > *out) const
const svalue * get_rvalue_for_bits(tree type, const region *reg, const bit_range &bits, region_model_context *ctxt) const
const svalue * get_initial_value_for_global(const region *reg) const
tristate compare_initial_and_pointer(const initial_svalue *init, const region_svalue *ptr) const
const function * get_current_function() const
const svalue * get_store_bytes(const region *base_reg, const byte_range &bytes, region_model_context *ctxt) const
static void register_pop_frame_callback(const pop_frame_callback &callback)
Definition region-model.h:555
bool apply_constraints_for_ggoto(const cfg_superedge &edge, const ggoto *goto_stmt, region_model_context *ctxt)
tree get_fndecl_for_call(const gcall *call, region_model_context *ctxt)
void loop_replay_fixup(const region_model *dst_state)
void check_dynamic_size_for_floats(const svalue *size_in_bytes, region_model_context *ctxt) const
bool operator==(const region_model &other) const
bool region_exists_p(const region *reg) const
region_model(region_model_manager *mgr)
const svalue * maybe_get_copy_bounds(const region *src_reg, const svalue *num_bytes_sval)
region_to_value_map dynamic_extents_t
Definition region-model.h:260
tristate eval_condition(tree lhs, enum tree_code op, tree rhs, region_model_context *ctxt) const
const svalue * scan_for_null_terminator_1(const region *reg, tree expr, const svalue **out_sval, region_model_context *ctxt) const
void check_function_attr_null_terminated_string_arg(const gcall *call, tree callee_fndecl, region_model_context *ctxt, rdwr_map &rdwr_idx)
bool called_from_main_p() const
bool add_constraints_from_binop(const svalue *outer_lhs, enum tree_code outer_op, const svalue *outer_rhs, bool *out, region_model_context *ctxt)
void set_value(const region *lhs_reg, const svalue *rhs_sval, region_model_context *ctxt)
void on_return(const greturn *stmt, region_model_context *ctxt)
void get_reachable_svalues(svalue_set *out, const svalue *extra_sval, const uncertainty_t *uncertainty)
void update_for_call_superedge(const call_superedge &call_edge, region_model_context *ctxt)
bool apply_constraints_for_exception(const gimple *last_stmt, region_model_context *ctxt, std::unique_ptr< rejected_constraint > *out)
tristate structural_equality(const svalue *a, const svalue *b) const
void copy_bytes(const region *dest_reg, const region *src_reg, tree src_ptr_expr, const svalue *num_bytes_sval, region_model_context *ctxt)
const frame_region * get_current_frame() const
Definition region-model.h:352
void on_setjmp(const gcall *stmt, const exploded_node *enode, region_model_context *ctxt)
region_model_manager *const m_mgr
Definition region-model.h:678
const frame_region * m_current_frame
Definition region-model.h:684
void check_region_for_taint(const region *reg, enum access_direction dir, region_model_context *ctxt) const
void on_top_level_param(tree param, bool nonnull, region_model_context *ctxt)
const builtin_known_function * get_builtin_kf(const gcall *call, region_model_context *ctxt=NULL) const
bool maybe_update_for_edge(const superedge &edge, const gimple *last_stmt, region_model_context *ctxt, std::unique_ptr< rejected_constraint > *out)
void mark_region_as_unknown(const region *reg, uncertainty_t *uncertainty)
void on_stmt_pre(const gimple *stmt, bool *out_unknown_side_effects, region_model_context *ctxt)
void check_call_format_attr(const call_details &cd, tree format_attr) const
void set_value(tree lhs, tree rhs, region_model_context *ctxt)
bool check_region_for_read(const region *src_reg, region_model_context *ctxt) const
void maybe_complain_about_infoleak(const region *dst_reg, const svalue *copied_sval, const region *src_reg, region_model_context *ctxt)
void handle_unrecognized_call(const gcall *call, region_model_context *ctxt)
region_model_manager * get_manager() const
Definition region-model.h:457
const known_function * get_known_function(tree fndecl, const call_details &cd) const
void handle_phi(const gphi *phi, tree lhs, tree rhs, const region_model &old_state, hash_set< const svalue * > &svals_changing_meaning, region_model_context *ctxt)
path_var get_representative_path_var_1(const svalue *sval, svalue_set *visited) const
void on_call_post(const gcall *stmt, bool unknown_side_effects, region_model_context *ctxt)
void write_bytes(const region *dest_reg, const svalue *num_bytes_sval, const svalue *sval, region_model_context *ctxt)
void unset_dynamic_extents(const region *reg)
const region * push_frame(const function &fun, const vec< const svalue * > *arg_sids, region_model_context *ctxt)
void check_for_writable_region(const region *dest_reg, region_model_context *ctxt) const
const region * get_lvalue_1(path_var pv, region_model_context *ctxt) const
const known_function * get_known_function(enum internal_fn) const
const region * get_lvalue(path_var pv, region_model_context *ctxt) const
void get_referenced_base_regions(auto_bitmap &out_ids) const
void update_for_int_cst_return(const call_details &cd, int retval, bool unmergeable)
const svalue * check_for_poison(const svalue *sval, tree expr, const region *src_region, region_model_context *ctxt) const
int get_stack_depth() const
json::object * to_json() const
bool check_region_bounds(const region *reg, enum access_direction dir, const svalue *sval_hint, region_model_context *ctxt) const
void check_call_args(const call_details &cd) const
void fill_region(const region *reg, const svalue *sval, region_model_context *ctxt)
void check_dynamic_size_for_taint(enum memory_space mem_space, const svalue *size_in_bytes, region_model_context *ctxt) const
bool check_symbolic_bounds(const region *base_reg, const svalue *sym_byte_offset, const svalue *num_bytes_sval, const svalue *capacity, enum access_direction dir, const svalue *sval_hint, region_model_context *ctxt) const
void mark_as_valid_fd(const svalue *sval, region_model_context *ctxt)
void check_function_attr_access(const gcall *call, tree callee_fndecl, region_model_context *ctxt, rdwr_map &rdwr_idx) const
const svalue * get_rvalue(path_var pv, region_model_context *ctxt) const
const store * get_store() const
Definition region-model.h:444
static void notify_on_pop_frame(const region_model *model, const region_model *prev_model, const svalue *retval, region_model_context *ctxt)
Definition region-model.h:561
dynamic_extents_t m_dynamic_extents
Definition region-model.h:690
static auto_vec< pop_frame_callback > pop_frame_callbacks
Definition region-model.h:676
int poison_any_pointers_to_descendents(const region *reg, enum poison_kind pkind)
const region * get_lvalue(tree expr, region_model_context *ctxt) const
const svalue * get_gassign_result(const gassign *assign, region_model_context *ctxt)
const svalue * read_bytes(const region *src_reg, tree src_ptr_expr, const svalue *num_bytes_sval, region_model_context *ctxt) const
const svalue * scan_for_null_terminator(const region *reg, tree expr, const svalue **out_sval, region_model_context *ctxt) const
void update_for_return_gcall(const gcall *call_stmt, region_model_context *ctxt)
const region * get_or_create_region_for_heap_alloc(const svalue *size_in_bytes, region_model_context *ctxt, bool update_state_machine=false, const call_details *cd=nullptr)
const svalue * get_rvalue(tree expr, region_model_context *ctxt) const
bool canonicalized_p() const
void purge_state_involving(const svalue *sval, region_model_context *ctxt)
void on_longjmp(const gcall *longjmp_call, const gcall *setjmp_call, int setjmp_stack_depth, region_model_context *ctxt)
void unbind_region_and_descendents(const region *reg, enum poison_kind pkind)
const dynamic_extents_t & get_dynamic_extents() const
Definition region-model.h:447
Definition region-model.h:141
void remove(const region *reg)
Definition region-model.h:168
iterator begin() const
Definition region-model.h:157
const svalue *const * get(const region *reg) const
Definition region-model.h:160
hash_map_t::iterator iterator
Definition region-model.h:144
hash_map_t m_hash_map
Definition region-model.h:186
void purge_state_involving(const svalue *sval)
hash_map< const region *, const svalue * > hash_map_t
Definition region-model.h:143
bool operator==(const region_to_value_map &other) const
iterator end() const
Definition region-model.h:158
void put(const region *reg, const svalue *sval)
Definition region-model.h:164
bool is_empty() const
Definition region-model.h:173
region_to_value_map & operator=(const region_to_value_map &other)
region_to_value_map()
Definition region-model.h:146
void dump_to_pp(pretty_printer *pp, bool simple, bool multiline) const
bool operator!=(const region_to_value_map &other) const
Definition region-model.h:152
void dump(bool simple) const
bool can_merge_with_p(const region_to_value_map &other, region_to_value_map *out) const
region_to_value_map(const region_to_value_map &other)
Definition region-model.h:147
json::object * to_json() const
Definition region-model.h:1165
virtual ~rejected_constraint()
Definition region-model.h:1167
virtual void dump_to_pp(pretty_printer *pp) const =0
rejected_constraint(const region_model &model)
Definition region-model.h:1173
const region_model & get_model() const
Definition region-model.h:1170
region_model m_model
Definition region-model.h:1177
Definition region-model.h:1197
void dump_to_pp(pretty_printer *pp) const final override
rejected_default_case(const region_model &model)
Definition region-model.h:1199
Definition region-model.h:1181
tree m_rhs
Definition region-model.h:1193
rejected_op_constraint(const region_model &model, tree lhs, enum tree_code op, tree rhs)
Definition region-model.h:1183
tree m_lhs
Definition region-model.h:1191
void dump_to_pp(pretty_printer *pp) const final override
enum tree_code m_op
Definition region-model.h:1192
Definition region-model.h:1207
void dump_to_pp(pretty_printer *pp) const final override
tree m_expr
Definition region-model.h:1218
const bounded_ranges * m_ranges
Definition region-model.h:1219
rejected_ranges_constraint(const region_model &model, tree expr, const bounded_ranges *ranges)
Definition region-model.h:1209
Definition supergraph.h:482
Definition program-state.h:75
Definition exploded-graph.h:1033
Definition supergraph.h:314
Definition supergraph.h:109
Definition supergraph.h:235
Definition supergraph.h:557
Definition region-model.h:888
int m_num_unexpected_codes
Definition region-model.h:901
bool had_errors_p() const
Definition region-model.h:898
void on_unexpected_tree_code(tree, const dump_location_t &) final override
Definition region-model.h:892
tentative_region_model_context()
Definition region-model.h:890
Definition region-model.h:217
virtual void visit_unknown_svalue(const unknown_svalue *)
Definition region-model.h:221
virtual void visit_poisoned_svalue(const poisoned_svalue *)
Definition region-model.h:222
virtual void visit_asm_output_svalue(const asm_output_svalue *)
Definition region-model.h:235
virtual void visit_unaryop_svalue(const unaryop_svalue *)
Definition region-model.h:225
virtual void visit_region_svalue(const region_svalue *)
Definition region-model.h:219
virtual void visit_initial_svalue(const initial_svalue *)
Definition region-model.h:224
virtual void visit_sub_svalue(const sub_svalue *)
Definition region-model.h:227
virtual void visit_setjmp_svalue(const setjmp_svalue *)
Definition region-model.h:223
virtual void visit_conjured_svalue(const conjured_svalue *)
Definition region-model.h:234
virtual void visit_placeholder_svalue(const placeholder_svalue *)
Definition region-model.h:231
virtual void visit_binop_svalue(const binop_svalue *)
Definition region-model.h:226
virtual void visit_const_fn_result_svalue(const const_fn_result_svalue *)
Definition region-model.h:236
virtual void visit_compound_svalue(const compound_svalue *)
Definition region-model.h:233
virtual void visit_unmergeable_svalue(const unmergeable_svalue *)
Definition region-model.h:230
virtual void visit_widening_svalue(const widening_svalue *)
Definition region-model.h:232
virtual void visit_bits_within_svalue(const bits_within_svalue *)
Definition region-model.h:229
virtual void visit_constant_svalue(const constant_svalue *)
Definition region-model.h:220
virtual void visit_region(const region *)
Definition region-model.h:238
virtual void visit_repeated_svalue(const repeated_svalue *)
Definition region-model.h:228
Definition genoutput.cc:147
Definition dumpfile.h:446
Definition genmatch.cc:845
bool is_empty() const
Definition hash-map.h:252
iterator begin() const
Definition hash-map.h:302
void remove(const Key &k)
Definition hash-map.h:218
iterator end() const
Definition hash-map.h:303
bool put(const Key &k, const Value &v)
Definition hash-map.h:168
FILE * stream
Definition pretty-print.h:120
Definition pretty-print.h:244
output_buffer * buffer
Definition pretty-print.h:256
bool debug
Definition collect-utils.cc:34
class edge_def * edge
Definition coretypes.h:342
union tree_node * tree
Definition coretypes.h:97
void internal_error(const char *,...) ATTRIBUTE_GCC_DIAG(1
internal_fn
Definition genmatch.cc:360
tree_code
Definition genmatch.cc:347
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
Definition access-diagram.h:30
access_direction
Definition analyzer.h:354
poison_kind
Definition svalue.h:389
void(* pop_frame_callback)(const region_model *model, const region_model *prev_model, const svalue *retval, region_model_context *ctxt)
Definition region-model.h:243
memory_space
Definition region.h:31
Definition fold-const.cc:4229
void add_path_var(path_var pv, hash &hstate)
Definition dump-context.h:31
poly_int< N, C > r
Definition poly-int.h:770
i
Definition poly-int.h:772
Ca const poly_int< N, Cb > & b
Definition poly-int.h:767
Ca & a
Definition poly-int.h:766
void pp_flush(pretty_printer *pp)
Definition pretty-print.cc:1960
void pp_newline(pretty_printer *pp)
Definition pretty-print.cc:2208
void pp_string(pretty_printer *pp, const char *str)
Definition pretty-print.cc:2235
Definition constraint-manager.h:120
Definition region-model.h:1116
const program_point & m_point
Definition region-model.h:1151
const program_state * m_state_a
Definition region-model.h:1155
const region_model * m_model_a
Definition region-model.h:1149
const extrinsic_state * m_ext_state
Definition region-model.h:1154
hash_set< const svalue * > m_svals_changing_meaning
Definition region-model.h:1158
void dump_to_pp(pretty_printer *pp, bool simple) const
model_merger(const region_model *model_a, const region_model *model_b, const program_point &point, region_model *merged_model, const extrinsic_state *ext_state, const program_state *state_a, const program_state *state_b)
Definition region-model.h:1117
const program_state * m_state_b
Definition region-model.h:1156
bool mergeable_svalue_p(const svalue *) const
void dump(bool simple) const
region_model_manager * get_manager() const
Definition region-model.h:1136
void on_widening_reuse(const widening_svalue *widening_sval)
region_model * m_merged_model
Definition region-model.h:1152
void dump(FILE *fp, bool simple) const
const function_point & get_function_point() const
Definition region-model.h:1142
const region_model * m_model_b
Definition region-model.h:1150
Definition region-model.h:195
int m_num_equiv_classes
Definition region-model.h:207
int m_num_bounded_ranges_constraints
Definition region-model.h:209
int m_num_client_items
Definition region-model.h:210
int m_num_svalues
Definition region-model.h:205
purge_stats()
Definition region-model.h:196
int m_num_constraints
Definition region-model.h:208
int m_num_regions
Definition region-model.h:206
Definition function.h:249
Definition gengtype.h:252
#define NULL
Definition system.h:50
#define DEBUG_FUNCTION
Definition system.h:1242
static bitmap visited
Definition tree-ssa-dce.cc:536
static control_dependences * cd
Definition tree-ssa-dce.cc:102
const char * get_tree_code_name(enum tree_code code)
Definition tree.cc:12775
#define TREE_CODE(NODE)
Definition tree.h:324
tree size_in_bytes(const_tree t)
Definition tree.h:5089
#define FOR_EACH_VEC_ELT(V, I, P)
Definition vec.h:1884