21#ifndef GCC_ANALYZER_REGION_MODEL_H
22#define GCC_ANALYZER_REGION_MODEL_H
56 void put (T src, T dst);
74 for (
int i = 0;
i < num_svalues;
i++)
111 T src (T::from_int (
i));
157 return !(*
this == other);
181 std::unique_ptr<json::object>
to_json ()
const;
183 std::unique_ptr<text_art::tree_widget>
247struct append_regions_cb_data;
260 const svalue *typeinfo_sval,
261 const svalue *destructor_sval)
271 void dump (FILE *fp,
bool simple)
const;
275 std::unique_ptr<json::object>
to_json ()
const;
277 std::unique_ptr<text_art::tree_widget>
311 return !(*
this == other);
319 void dump (FILE *fp,
bool simple,
bool multiline)
const;
325 std::unique_ptr<json::object>
to_json ()
const;
327 std::unique_ptr<text_art::tree_widget>
337 bool *out_unknown_side_effects,
346 bool unknown_side_effects,
354 const svalue *num_bytes_sval);
384 const gcall *call_stmt,
390 const svalue **out_result,
392 const gcall *call_stmt,
393 bool eval_return_svalue =
true);
404 bool add_nonnull_constraint =
true)
const;
422 const svalue *num_bytes_sval,
427 const svalue *num_bytes_sval,
432 const svalue *num_bytes_sval,
452 std::unique_ptr<rejected_constraint> *out);
457 bool update_state_machine =
false,
500 return m_mgr->get_range_manager ();
518 struct append_regions_cb_data *
data);
544 const svalue *copied_sval,
555 const svalue *old_ptr_sval,
556 const svalue *new_ptr_sval);
561 const svalue *new_ptr_sval);
587 bool include_terminator,
588 const svalue **out_sval)
const;
607 callback (model, prev_model, retval, ctxt);
705 const svalue *sym_byte_offset,
706 const svalue *num_bytes_sval,
717 tree format_attr)
const;
771 warn (std::unique_ptr<pending_diagnostic> d,
772 std::unique_ptr<pending_location::fixer_for_epath> ploc_fixer =
nullptr);
781 warn_at (std::unique_ptr<pending_diagnostic> d,
786 virtual void add_note (std::unique_ptr<pending_note> pn) = 0;
790 virtual void add_event (std::unique_ptr<checker_event> event) = 0;
847 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
860 unsigned *out_sm_idx,
861 std::unique_ptr<sm_context> *out_sm_context) = 0;
866 unsigned *out_sm_idx,
867 std::unique_ptr<sm_context> *out_sm_context)
870 out_sm_idx, out_sm_context);
874 unsigned *out_sm_idx)
881 unsigned *out_sm_idx)
918 void add_note (std::unique_ptr<pending_note>)
override;
919 void add_event (std::unique_ptr<checker_event>)
override;
926 const svalue *rhs ATTRIBUTE_UNUSED)
override
935 bool is_mutable ATTRIBUTE_UNUSED)
override
939 tree rhs ATTRIBUTE_UNUSED)
override
950 void bifurcate (std::unique_ptr<custom_edge_info> info)
override;
959 std::unique_ptr<sm_context> *)
override
1003 return m_inner->get_pending_location_for_diag ();
1013 return m_inner->warn_at (std::move (d), std::move (ploc));
1018 void add_note (std::unique_ptr<pending_note> pn)
override
1021 m_inner->add_note (std::move (pn));
1023 void add_event (std::unique_ptr<checker_event> event)
override;
1028 m_inner->on_svalue_leak (sval);
1035 m_inner->on_liveness_change (live_svalues, model);
1041 return m_inner->get_logger ();
1048 const svalue *rhs)
override
1051 m_inner->on_condition (lhs, op, rhs);
1058 m_inner->on_bounded_ranges (sval, ranges);
1064 m_inner->on_pop_frame (frame_reg);
1070 m_inner->on_unknown_change (sval, is_mutable);
1083 m_inner->on_unexpected_tree_code (t, loc);
1089 m_inner->on_escaped_function (fndecl);
1095 return m_inner->get_uncertainty ();
1103 m_inner->purge_state_involving (sval);
1106 void bifurcate (std::unique_ptr<custom_edge_info> info)
override
1109 m_inner->bifurcate (std::move (info));
1121 return m_inner->get_ext_state ();
1129 unsigned *out_sm_idx,
1130 std::unique_ptr<sm_context> *out_sm_context)
1134 return m_inner->get_state_map_by_name (name, out_smap, out_sm, out_sm_idx,
1173 return m_inner->checking_for_infinite_loop_p ();
1179 m_inner->on_unusable_in_infinite_loop ();
1202 if (
m_inner->warn_at (std::move (d), std::move (ploc)))
1241 void dump (FILE *fp,
bool simple)
const;
1253 return m_point.get_supernode ();
1342 return m_mgr.get_known_function_manager ();
1371 warn_at (std::unique_ptr<pending_diagnostic> d,
1374 m_diagnostics.safe_push (d.release ());
1378 unsigned get_num_diagnostics ()
const {
return m_diagnostics.length (); }
1380 void on_unexpected_tree_code (
tree t,
const dump_location_t &)
1389 auto_delete_vec<pending_diagnostic> m_diagnostics;
1395#define ADD_SAT_CONSTRAINT(MODEL, LHS, OP, RHS) \
1396 SELFTEST_BEGIN_STMT \
1397 bool sat = (MODEL).add_constraint (LHS, OP, RHS, nullptr); \
1398 ASSERT_TRUE (sat); \
1404#define ADD_UNSAT_CONSTRAINT(MODEL, LHS, OP, RHS) \
1405 SELFTEST_BEGIN_STMT \
1406 bool sat = (MODEL).add_constraint (LHS, OP, RHS, nullptr); \
1407 ASSERT_FALSE (sat); \
1412void assert_condition (
const location &loc,
1413 region_model &model,
1414 const svalue *lhs,
tree_code op,
const svalue *rhs,
1417void assert_condition (
const location &loc,
1418 region_model &model,
1425#define ASSERT_CONDITION_TRUE(REGION_MODEL, LHS, OP, RHS) \
1426 SELFTEST_BEGIN_STMT \
1427 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1428 tristate (tristate::TS_TRUE)); \
1434#define ASSERT_CONDITION_FALSE(REGION_MODEL, LHS, OP, RHS) \
1435 SELFTEST_BEGIN_STMT \
1436 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1437 tristate (tristate::TS_FALSE)); \
1443#define ASSERT_CONDITION_UNKNOWN(REGION_MODEL, LHS, OP, RHS) \
1444 SELFTEST_BEGIN_STMT \
1445 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1446 tristate (tristate::TS_UNKNOWN)); \
hash_map< rdwr_access_hash, attr_access > rdwr_map
Definition attribs.h:402
bool warn_at(std::unique_ptr< pending_diagnostic > d, pending_location &&ploc) override
Definition region-model.h:1198
virtual void add_annotations()=0
annotating_context(region_model_context *inner)
Definition region-model.h:1214
Definition constraint-manager.h:178
Definition call-details.h:31
Definition call-summary.h:68
Definition constraint-manager.h:410
known_function_manager * get_known_function_manager()
Definition region-model.h:1340
const supergraph * get_supergraph()
Definition region-model.h:1338
const supergraph * m_sg
Definition region-model.h:1349
region_model_manager * get_model_manager()
Definition region-model.h:1339
void log_stats(logger *logger) const
engine(region_model_manager &mgr, const supergraph *sg=nullptr)
region_model_manager & m_mgr
Definition region-model.h:1348
Definition exploded-graph.h:783
Definition exploded-graph.h:206
Definition program-state.h:34
Definition known-function-manager.h:41
Definition analyzer-logging.h:34
Definition region-model.h:905
const program_state * get_state() const override
Definition region-model.h:966
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:955
bool checking_for_infinite_loop_p() const override
Definition region-model.h:969
void maybe_did_work() override
Definition region-model.h:968
uncertainty_t * get_uncertainty() override
Definition region-model.h:946
void on_unexpected_tree_code(tree, const dump_location_t &) override
Definition region-model.h:942
void on_unknown_change(const svalue *sval, bool is_mutable) override
Definition region-model.h:934
void on_pop_frame(const frame_region *) override
Definition region-model.h:933
void on_phi(const gphi *phi, tree rhs) override
Definition region-model.h:938
void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) override
Definition region-model.h:924
void add_event(std::unique_ptr< checker_event >) override
void on_liveness_change(const svalue_set &, const region_model *) override
Definition region-model.h:921
logger * get_logger() override
Definition region-model.h:923
void on_escaped_function(tree) override
Definition region-model.h:944
const exploded_graph * get_eg() const override
Definition region-model.h:965
const gimple * get_stmt() const override
Definition region-model.h:964
pending_location get_pending_location_for_diag() const override
Definition region-model.h:908
void on_unusable_in_infinite_loop() override
Definition region-model.h:970
bool warn_at(std::unique_ptr< pending_diagnostic >, pending_location &&) override
Definition region-model.h:913
void on_svalue_leak(const svalue *) override
Definition region-model.h:920
void add_note(std::unique_ptr< pending_note >) override
void purge_state_involving(const svalue *sval) override
Definition region-model.h:948
const extrinsic_state * get_ext_state() const override
Definition region-model.h:953
void terminate_path() override
void on_bounded_ranges(const svalue &, const bounded_ranges &) override
Definition region-model.h:929
void bifurcate(std::unique_ptr< custom_edge_info > info) override
void put(T src, T dst)
Definition region-model.h:82
void dump() const
Definition region-model.h:124
T get_dst_for_src(T src) const
Definition region-model.h:91
void dump_to_pp(pretty_printer *pp) const
Definition region-model.h:102
auto_vec< T > m_src_to_dst
Definition region-model.h:63
void update(T *) const
Definition region-model.h:136
one_way_id_map(int num_ids)
Definition region-model.h:71
Definition program-point.h:54
Definition program-state.h:224
Definition region-model-reachability.h:36
region_model_context * m_inner
Definition region-model.h:1188
const exploded_graph * get_eg() const override
Definition region-model.h:1148
void on_bounded_ranges(const svalue &sval, const bounded_ranges &ranges) override
Definition region-model.h:1054
void on_phi(const gphi *phi, tree rhs) override
Definition region-model.h:1073
void add_event(std::unique_ptr< checker_event > event) override
const extrinsic_state * get_ext_state() const override
Definition region-model.h:1118
void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) override
Definition region-model.h:1046
const gimple * get_stmt() const override
Definition region-model.h:1140
void maybe_did_work() override
Definition region-model.h:1164
const program_state * get_state() const override
Definition region-model.h:1156
void on_pop_frame(const frame_region *frame_reg) override
Definition region-model.h:1061
uncertainty_t * get_uncertainty() override
Definition region-model.h:1092
void bifurcate(std::unique_ptr< custom_edge_info > info) override
Definition region-model.h:1106
void add_note(std::unique_ptr< pending_note > pn) override
Definition region-model.h:1018
void on_svalue_leak(const svalue *sval) override
Definition region-model.h:1025
pending_location get_pending_location_for_diag() const override
Definition region-model.h:1000
bool checking_for_infinite_loop_p() const override
Definition region-model.h:1170
logger * get_logger() override
Definition region-model.h:1038
region_model_context_decorator(region_model_context *inner)
Definition region-model.h:1183
void purge_state_involving(const svalue *sval) override
Definition region-model.h:1100
void on_liveness_change(const svalue_set &live_svalues, const region_model *model) override
Definition region-model.h:1031
void on_unexpected_tree_code(tree t, const dump_location_t &loc) override
Definition region-model.h:1079
void on_escaped_function(tree fndecl) override
Definition region-model.h:1086
bool warn_at(std::unique_ptr< pending_diagnostic > d, pending_location &&ploc) override
Definition region-model.h:1009
void terminate_path() override
Definition region-model.h:1112
void on_unknown_change(const svalue *sval, bool is_mutable) override
Definition region-model.h:1067
void on_unusable_in_infinite_loop() override
Definition region-model.h:1176
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:1126
Definition region-model.h:768
virtual void on_bounded_ranges(const svalue &sval, const bounded_ranges &ranges)=0
virtual bool warn_at(std::unique_ptr< pending_diagnostic > d, pending_location &&ploc)=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
bool get_malloc_map(sm_state_map **out_smap, const state_machine **out_sm, unsigned *out_sm_idx)
Definition region-model.h:872
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:864
virtual void add_note(std::unique_ptr< pending_note > pn)=0
virtual pending_location get_pending_location_for_diag() const =0
virtual logger * get_logger()=0
virtual const extrinsic_state * get_ext_state() const =0
bool possibly_tainted_p(const svalue *sval)
virtual const program_state * get_state() const =0
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:879
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
bool warn(std::unique_ptr< pending_diagnostic > d, std::unique_ptr< pending_location::fixer_for_epath > ploc_fixer=nullptr)
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
Definition region-model.h:299
path_var get_representative_path_var(const svalue *sval, svalue_set *visited, logger *logger) const
region_model(const region_model &other)
void impl_deallocation_call(const call_details &cd)
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:483
constraint_manager * get_constraints()
Definition region-model.h:478
void update_for_nonzero_return(const call_details &cd)
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 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)
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
void update_for_return_gcall(const gcall &call_stmt, region_model_context *ctxt)
bounded_ranges_manager * get_range_manager() const
Definition region-model.h:498
void dump(bool simple) const
path_var get_representative_path_var_1(const svalue *sval, svalue_set *visited, logger *logger) 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
const builtin_known_function * get_builtin_kf(const gcall &call, region_model_context *ctxt=nullptr) 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:745
const exception_node * get_current_thrown_exception() const
Definition region-model.h:616
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 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
bool add_constraint(const svalue *lhs, enum tree_code op, const svalue *rhs, 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:743
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)
const region * push_frame(const function &fun, const gcall *call_stmt, const vec< const svalue * > *arg_sids, region_model_context *ctxt)
bool operator!=(const region_model &other) const
Definition region-model.h:309
const svalue * get_store_value(const region *reg, region_model_context *ctxt) const
const region * get_region_for_poisoned_expr(tree expr) const
void push_caught_exception(const exception_node &node)
Definition region-model.h:630
void poison_any_pointers_to_descendents(const region *reg, enum poison_kind pkind)
void update_for_gcall(const gcall &call_stmt, region_model_context *ctxt, function *callee=nullptr)
void check_function_attrs(const gcall &call, tree callee_fndecl, region_model_context *ctxt)
void get_regions_for_current_frame(auto_vec< const decl_region * > *out) const
std::unique_ptr< text_art::tree_widget > make_dump_widget(const text_art::dump_widget_info &dwi) 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
std::vector< exception_node > m_caught_exceptions_stack
Definition region-model.h:750
tristate compare_initial_and_pointer(const initial_svalue *init, const region_svalue *ptr) const
exception_node pop_thrown_exception()
Definition region-model.h:622
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:595
bool can_merge_with_p(const region_model &other_model, const program_point &point, region_model *out_model, const extrinsic_state *ext_state=nullptr, const program_state *state_a=nullptr, const program_state *state_b=nullptr) const
bool on_call_pre(const gcall &stmt, 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
tree get_fndecl_for_call(const gcall &call, region_model_context *ctxt)
bool region_exists_p(const region *reg) const
tree get_representative_tree(const svalue *sval, logger *logger=nullptr) const
void check_function_attr_access(const gcall &call, tree callee_fndecl, region_model_context *ctxt, rdwr_map &rdwr_idx) const
region_model(region_model_manager *mgr)
void handle_unrecognized_call(const gcall &call, region_model_context *ctxt)
void push_thrown_exception(const exception_node &node)
Definition region-model.h:612
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:301
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
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 check_one_function_attr_null_terminated_string_arg(const gcall &call, tree callee_fndecl, region_model_context *ctxt, rdwr_map &rdwr_idx, tree attr)
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)
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:387
std::unique_ptr< json::object > to_json() const
region_model_manager *const m_mgr
Definition region-model.h:741
const frame_region * m_current_frame
Definition region-model.h:747
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)
void check_function_attr_null_terminated_string_arg(const gcall &call, tree callee_fndecl, region_model_context *ctxt, rdwr_map &rdwr_idx)
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 check_for_throw_inside_call(const gcall &call, tree fndecl, region_model_context *ctxt)
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)
region_model_manager * get_manager() const
Definition region-model.h:497
const known_function * get_known_function(tree fndecl, const call_details &cd) const
const exception_node * get_current_caught_exception() const
Definition region-model.h:634
void write_bytes(const region *dest_reg, const svalue *num_bytes_sval, 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 unset_dynamic_extents(const region *reg)
void on_setjmp(const gcall &stmt, const exploded_node &enode, const superedge &sedge, 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
path_var get_representative_path_var(const region *reg, svalue_set *visited, logger *logger) 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
std::vector< exception_node > m_thrown_exceptions_stack
Definition region-model.h:749
bool check_region_bounds(const region *reg, enum access_direction dir, const svalue *sval_hint, region_model_context *ctxt) const
tree get_representative_tree(const region *reg, logger *logger=nullptr) const
void on_call_post(const gcall &stmt, bool unknown_side_effects, region_model_context *ctxt)
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)
const svalue * get_rvalue(path_var pv, region_model_context *ctxt) const
path_var get_representative_path_var_1(const region *reg, svalue_set *visited, logger *logger) const
const store * get_store() const
Definition region-model.h:484
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:601
dynamic_extents_t m_dynamic_extents
Definition region-model.h:756
static auto_vec< pop_frame_callback > pop_frame_callbacks
Definition region-model.h:739
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
void pop_frame(tree result_lvalue, const svalue **out_result, region_model_context *ctxt, const gcall *call_stmt, bool eval_return_svalue=true)
const svalue * scan_for_null_terminator(const region *reg, tree expr, const svalue **out_sval, region_model_context *ctxt) const
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)
exception_node pop_caught_exception()
Definition region-model.h:640
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 unbind_region_and_descendents(const region *reg, enum poison_kind pkind)
const dynamic_extents_t & get_dynamic_extents() const
Definition region-model.h:487
Definition region-model.h:144
void remove(const region *reg)
Definition region-model.h:171
iterator begin() const
Definition region-model.h:160
const svalue *const * get(const region *reg) const
Definition region-model.h:163
hash_map_t::iterator iterator
Definition region-model.h:147
hash_map_t m_hash_map
Definition region-model.h:192
std::unique_ptr< text_art::tree_widget > make_dump_widget(const text_art::dump_widget_info &dwi) const
void purge_state_involving(const svalue *sval)
std::unique_ptr< json::object > to_json() const
hash_map< const region *, const svalue * > hash_map_t
Definition region-model.h:146
bool operator==(const region_to_value_map &other) const
iterator end() const
Definition region-model.h:161
void put(const region *reg, const svalue *sval)
Definition region-model.h:167
bool is_empty() const
Definition region-model.h:176
region_to_value_map & operator=(const region_to_value_map &other)
region_to_value_map()
Definition region-model.h:149
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:155
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:150
virtual ~rejected_constraint()
Definition region-model.h:1276
virtual void dump_to_pp(pretty_printer *pp) const =0
rejected_constraint(const region_model &model)
Definition region-model.h:1282
const region_model & get_model() const
Definition region-model.h:1279
region_model m_model
Definition region-model.h:1286
void dump_to_pp(pretty_printer *pp) const final override
rejected_default_case(const region_model &model)
Definition region-model.h:1308
tree m_rhs
Definition region-model.h:1302
rejected_op_constraint(const region_model &model, tree lhs, enum tree_code op, tree rhs)
Definition region-model.h:1292
tree m_lhs
Definition region-model.h:1300
void dump_to_pp(pretty_printer *pp) const final override
enum tree_code m_op
Definition region-model.h:1301
void dump_to_pp(pretty_printer *pp) const final override
tree m_expr
Definition region-model.h:1327
const bounded_ranges * m_ranges
Definition region-model.h:1328
rejected_ranges_constraint(const region_model &model, tree expr, const bounded_ranges *ranges)
Definition region-model.h:1318
Definition program-state.h:92
Definition supergraph.h:281
Definition supergraph.h:105
Definition supergraph.h:224
int m_num_unexpected_codes
Definition region-model.h:990
bool had_errors_p() const
Definition region-model.h:987
void on_unexpected_tree_code(tree, const dump_location_t &) final override
Definition region-model.h:981
tentative_region_model_context()
Definition region-model.h:979
Definition region-model.h:223
virtual void visit_unknown_svalue(const unknown_svalue *)
Definition region-model.h:227
virtual void visit_poisoned_svalue(const poisoned_svalue *)
Definition region-model.h:228
virtual void visit_asm_output_svalue(const asm_output_svalue *)
Definition region-model.h:241
virtual void visit_unaryop_svalue(const unaryop_svalue *)
Definition region-model.h:231
virtual void visit_region_svalue(const region_svalue *)
Definition region-model.h:225
virtual void visit_initial_svalue(const initial_svalue *)
Definition region-model.h:230
virtual void visit_sub_svalue(const sub_svalue *)
Definition region-model.h:233
virtual void visit_setjmp_svalue(const setjmp_svalue *)
Definition region-model.h:229
virtual void visit_conjured_svalue(const conjured_svalue *)
Definition region-model.h:240
virtual void visit_placeholder_svalue(const placeholder_svalue *)
Definition region-model.h:237
virtual void visit_binop_svalue(const binop_svalue *)
Definition region-model.h:232
virtual void visit_const_fn_result_svalue(const const_fn_result_svalue *)
Definition region-model.h:242
virtual void visit_compound_svalue(const compound_svalue *)
Definition region-model.h:239
virtual void visit_unmergeable_svalue(const unmergeable_svalue *)
Definition region-model.h:236
virtual void visit_widening_svalue(const widening_svalue *)
Definition region-model.h:238
virtual void visit_bits_within_svalue(const bits_within_svalue *)
Definition region-model.h:235
virtual void visit_constant_svalue(const constant_svalue *)
Definition region-model.h:226
virtual void visit_region(const region *)
Definition region-model.h:244
virtual void visit_repeated_svalue(const repeated_svalue *)
Definition region-model.h:234
Definition genoutput.cc:150
Definition dumpfile.h:446
Definition genmatch.cc:1506
Definition pretty-print.h:241
void set_output_stream(FILE *outfile)
Definition pretty-print.h:274
bool debug
Definition collect-utils.cc:34
union tree_node * tree
Definition coretypes.h:97
void internal_error(const char *,...) ATTRIBUTE_GCC_DIAG(1
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2009
internal_fn
Definition genmatch.cc:1015
tree_code
Definition genmatch.cc:1002
Definition access-diagram.h:30
@ stmt
Definition checker-event.h:38
access_direction
Definition common.h:379
poison_kind
Definition svalue.h:427
void(* pop_frame_callback)(const region_model *model, const region_model *prev_model, const svalue *retval, region_model_context *ctxt)
Definition region-model.h:249
hash_set< const svalue * > svalue_set
Definition common.h:73
memory_space
Definition region.h:32
Definition custom-sarif-properties/state-graphs.h:33
Definition fold-const.cc:4345
void add_path_var(path_var pv, hash &hstate)
Definition dump-context.h:31
poly_int< N, C > r
Definition poly-int.h:774
i
Definition poly-int.h:776
Ca const poly_int< N, Cb > & b
Definition poly-int.h:771
Ca & a
Definition poly-int.h:770
void pp_flush(pretty_printer *pp)
Definition pretty-print.cc:2462
void pp_newline(pretty_printer *pp)
Definition pretty-print.cc:2737
void pp_string(pretty_printer *pp, const char *str)
Definition pretty-print.cc:2764
Definition constraint-manager.h:123
Definition region-model.h:258
exception_node(const svalue *exception_sval, const svalue *typeinfo_sval, const svalue *destructor_sval)
Definition region-model.h:259
const svalue * m_exception_sval
Definition region-model.h:284
bool operator==(const exception_node &other) const
tree maybe_get_type() const
void dump(bool simple) const
const svalue * m_typeinfo_sval
Definition region-model.h:285
const svalue * m_destructor_sval
Definition region-model.h:286
void dump(FILE *fp, bool simple) const
std::unique_ptr< text_art::tree_widget > make_dump_widget(const text_art::dump_widget_info &dwi) const
void dump_to_pp(pretty_printer *pp, bool simple) const
std::unique_ptr< json::object > to_json() const
void add_to_reachable_regions(reachable_regions &) const
const program_point & m_point
Definition region-model.h:1260
const program_state * m_state_a
Definition region-model.h:1264
const region_model * m_model_a
Definition region-model.h:1258
const extrinsic_state * m_ext_state
Definition region-model.h:1263
hash_set< const svalue * > m_svals_changing_meaning
Definition region-model.h:1267
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:1225
const program_state * m_state_b
Definition region-model.h:1265
const supernode * get_supernode() const
Definition region-model.h:1251
bool mergeable_svalue_p(const svalue *) const
void dump(bool simple) const
region_model_manager * get_manager() const
Definition region-model.h:1244
void on_widening_reuse(const widening_svalue *widening_sval)
region_model * m_merged_model
Definition region-model.h:1261
void dump(FILE *fp, bool simple) const
const region_model * m_model_b
Definition region-model.h:1259
Definition diagnostic-manager.h:35
int m_num_equiv_classes
Definition region-model.h:213
int m_num_bounded_ranges_constraints
Definition region-model.h:215
int m_num_client_items
Definition region-model.h:216
int m_num_svalues
Definition region-model.h:211
purge_stats()
Definition region-model.h:202
int m_num_constraints
Definition region-model.h:214
int m_num_regions
Definition region-model.h:212
Definition function.h:249
Definition dump-widget-info.h:31
Definition gengtype.h:252
#define gcc_assert(EXPR)
Definition system.h:817
#define DEBUG_FUNCTION
Definition system.h:1239
static bitmap visited
Definition tree-ssa-dce.cc:640
static control_dependences * cd
Definition tree-ssa-dce.cc:104
const char * get_tree_code_name(enum tree_code code)
Definition tree.cc:13025
#define TREE_CODE(NODE)
Definition tree.h:325
tree size_in_bytes(const_tree t)
Definition tree.h:5256
#define FOR_EACH_VEC_ELT(V, I, P)
Definition vec.h:1895