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;
255 const svalue *typeinfo_sval,
256 const svalue *destructor_sval)
266 void dump (FILE *fp,
bool simple)
const;
270 std::unique_ptr<json::object>
to_json ()
const;
272 std::unique_ptr<text_art::tree_widget>
306 return !(*
this == other);
314 void dump (FILE *fp,
bool simple,
bool multiline)
const;
320 std::unique_ptr<json::object>
to_json ()
const;
322 std::unique_ptr<text_art::tree_widget>
332 bool *out_unknown_side_effects,
341 bool unknown_side_effects,
349 const svalue *num_bytes_sval);
381 const gcall *call_stmt,
387 const svalue **out_result,
389 const gcall *call_stmt,
390 bool eval_return_svalue =
true);
401 bool add_nonnull_constraint =
true)
const;
419 const svalue *num_bytes_sval,
424 const svalue *num_bytes_sval,
429 const svalue *num_bytes_sval,
449 std::unique_ptr<rejected_constraint> *out);
454 bool update_state_machine =
false,
497 return m_mgr->get_range_manager ();
515 struct append_regions_cb_data *
data);
541 const svalue *copied_sval,
552 const svalue *old_ptr_sval,
553 const svalue *new_ptr_sval);
558 const svalue *new_ptr_sval);
584 bool include_terminator,
585 const svalue **out_sval)
const;
686 const svalue *sym_byte_offset,
687 const svalue *num_bytes_sval,
698 tree format_attr)
const;
751 warn (std::unique_ptr<pending_diagnostic> d,
752 std::unique_ptr<pending_location::fixer_for_epath> ploc_fixer =
nullptr);
761 warn_at (std::unique_ptr<pending_diagnostic> d,
766 virtual void add_note (std::unique_ptr<pending_note> pn) = 0;
770 virtual void add_event (std::unique_ptr<checker_event> event) = 0;
827 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
840 unsigned *out_sm_idx,
841 std::unique_ptr<sm_context> *out_sm_context) = 0;
846 unsigned *out_sm_idx,
847 std::unique_ptr<sm_context> *out_sm_context)
850 out_sm_idx, out_sm_context);
854 unsigned *out_sm_idx)
861 unsigned *out_sm_idx)
898 void add_note (std::unique_ptr<pending_note>)
override;
899 void add_event (std::unique_ptr<checker_event>)
override;
906 const svalue *rhs ATTRIBUTE_UNUSED)
override
915 bool is_mutable ATTRIBUTE_UNUSED)
override
919 tree rhs ATTRIBUTE_UNUSED)
override
930 void bifurcate (std::unique_ptr<custom_edge_info> info)
override;
939 std::unique_ptr<sm_context> *)
override
983 return m_inner->get_pending_location_for_diag ();
989 warn_at (std::unique_ptr<pending_diagnostic> d,
993 return m_inner->warn_at (std::move (d), std::move (ploc));
998 void add_note (std::unique_ptr<pending_note> pn)
override
1001 m_inner->add_note (std::move (pn));
1003 void add_event (std::unique_ptr<checker_event> event)
override;
1008 m_inner->on_svalue_leak (sval);
1015 m_inner->on_liveness_change (live_svalues, model);
1021 return m_inner->get_logger ();
1028 const svalue *rhs)
override
1031 m_inner->on_condition (lhs, op, rhs);
1038 m_inner->on_bounded_ranges (sval, ranges);
1044 m_inner->on_pop_frame (frame_reg);
1050 m_inner->on_unknown_change (sval, is_mutable);
1063 m_inner->on_unexpected_tree_code (t, loc);
1069 m_inner->on_escaped_function (fndecl);
1075 return m_inner->get_uncertainty ();
1083 m_inner->purge_state_involving (sval);
1086 void bifurcate (std::unique_ptr<custom_edge_info> info)
override
1089 m_inner->bifurcate (std::move (info));
1101 return m_inner->get_ext_state ();
1109 unsigned *out_sm_idx,
1110 std::unique_ptr<sm_context> *out_sm_context)
1114 return m_inner->get_state_map_by_name (name, out_smap, out_sm, out_sm_idx,
1153 return m_inner->checking_for_infinite_loop_p ();
1159 m_inner->on_unusable_in_infinite_loop ();
1182 if (
m_inner->warn_at (std::move (d), std::move (ploc)))
1221 void dump (FILE *fp,
bool simple)
const;
1233 return m_point.get_supernode ();
1322 return m_mgr.get_known_function_manager ();
1334extern std::unique_ptr<pending_diagnostic>
1336 const region *src_region,
1339extern std::unique_ptr<pending_diagnostic>
1342 const region *src_region);
1344extern std::unique_ptr<pending_diagnostic>
1346 int operand_precision,
1348 const region *src_region);
1350extern std::unique_ptr<pending_diagnostic>
1353extern std::unique_ptr<pending_diagnostic>
1375 warn_at (std::unique_ptr<pending_diagnostic> d,
1378 m_diagnostics.safe_push (d.release ());
1382 unsigned get_num_diagnostics ()
const {
return m_diagnostics.length (); }
1384 void on_unexpected_tree_code (
tree t,
const dump_location_t &)
1393 auto_delete_vec<pending_diagnostic> m_diagnostics;
1399#define ADD_SAT_CONSTRAINT(MODEL, LHS, OP, RHS) \
1400 SELFTEST_BEGIN_STMT \
1401 bool sat = (MODEL).add_constraint (LHS, OP, RHS, nullptr); \
1402 ASSERT_TRUE (sat); \
1408#define ADD_UNSAT_CONSTRAINT(MODEL, LHS, OP, RHS) \
1409 SELFTEST_BEGIN_STMT \
1410 bool sat = (MODEL).add_constraint (LHS, OP, RHS, nullptr); \
1411 ASSERT_FALSE (sat); \
1416void assert_condition (
const location &loc,
1417 region_model &model,
1418 const svalue *lhs,
tree_code op,
const svalue *rhs,
1421void assert_condition (
const location &loc,
1422 region_model &model,
1429#define ASSERT_CONDITION_TRUE(REGION_MODEL, LHS, OP, RHS) \
1430 SELFTEST_BEGIN_STMT \
1431 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1432 tristate (tristate::TS_TRUE)); \
1438#define ASSERT_CONDITION_FALSE(REGION_MODEL, LHS, OP, RHS) \
1439 SELFTEST_BEGIN_STMT \
1440 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1441 tristate (tristate::TS_FALSE)); \
1447#define ASSERT_CONDITION_UNKNOWN(REGION_MODEL, LHS, OP, RHS) \
1448 SELFTEST_BEGIN_STMT \
1449 assert_condition (SELFTEST_LOCATION, REGION_MODEL, LHS, OP, RHS, \
1450 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:1178
virtual void add_annotations()=0
annotating_context(region_model_context *inner)
Definition region-model.h:1194
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:1320
const supergraph * get_supergraph()
Definition region-model.h:1318
const supergraph * m_sg
Definition region-model.h:1329
region_model_manager * get_model_manager()
Definition region-model.h:1319
void log_stats(logger *logger) const
engine(region_model_manager &mgr, const supergraph *sg=nullptr)
region_model_manager & m_mgr
Definition region-model.h:1328
Definition exploded-graph.h:794
Definition exploded-graph.h:206
Definition program-state.h:34
Definition known-function-manager.h:41
Definition analyzer-logging.h:36
Definition region-model.h:885
const program_state * get_state() const override
Definition region-model.h:946
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:935
bool checking_for_infinite_loop_p() const override
Definition region-model.h:949
void maybe_did_work() override
Definition region-model.h:948
uncertainty_t * get_uncertainty() override
Definition region-model.h:926
void on_unexpected_tree_code(tree, const dump_location_t &) override
Definition region-model.h:922
void on_unknown_change(const svalue *sval, bool is_mutable) override
Definition region-model.h:914
void on_pop_frame(const frame_region *) override
Definition region-model.h:913
void on_phi(const gphi *phi, tree rhs) override
Definition region-model.h:918
void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) override
Definition region-model.h:904
void add_event(std::unique_ptr< checker_event >) override
void on_liveness_change(const svalue_set &, const region_model *) override
Definition region-model.h:901
logger * get_logger() override
Definition region-model.h:903
void on_escaped_function(tree) override
Definition region-model.h:924
const exploded_graph * get_eg() const override
Definition region-model.h:945
const gimple * get_stmt() const override
Definition region-model.h:944
pending_location get_pending_location_for_diag() const override
Definition region-model.h:888
void on_unusable_in_infinite_loop() override
Definition region-model.h:950
bool warn_at(std::unique_ptr< pending_diagnostic >, pending_location &&) override
Definition region-model.h:893
void on_svalue_leak(const svalue *) override
Definition region-model.h:900
void add_note(std::unique_ptr< pending_note >) override
void purge_state_involving(const svalue *sval) override
Definition region-model.h:928
const extrinsic_state * get_ext_state() const override
Definition region-model.h:933
void terminate_path() override
void on_bounded_ranges(const svalue &, const bounded_ranges &) override
Definition region-model.h:909
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:1168
const exploded_graph * get_eg() const override
Definition region-model.h:1128
void on_bounded_ranges(const svalue &sval, const bounded_ranges &ranges) override
Definition region-model.h:1034
void on_phi(const gphi *phi, tree rhs) override
Definition region-model.h:1053
void add_event(std::unique_ptr< checker_event > event) override
const extrinsic_state * get_ext_state() const override
Definition region-model.h:1098
void on_condition(const svalue *lhs, enum tree_code op, const svalue *rhs) override
Definition region-model.h:1026
const gimple * get_stmt() const override
Definition region-model.h:1120
void maybe_did_work() override
Definition region-model.h:1144
const program_state * get_state() const override
Definition region-model.h:1136
void on_pop_frame(const frame_region *frame_reg) override
Definition region-model.h:1041
uncertainty_t * get_uncertainty() override
Definition region-model.h:1072
void bifurcate(std::unique_ptr< custom_edge_info > info) override
Definition region-model.h:1086
void add_note(std::unique_ptr< pending_note > pn) override
Definition region-model.h:998
void on_svalue_leak(const svalue *sval) override
Definition region-model.h:1005
pending_location get_pending_location_for_diag() const override
Definition region-model.h:980
bool checking_for_infinite_loop_p() const override
Definition region-model.h:1150
logger * get_logger() override
Definition region-model.h:1018
region_model_context_decorator(region_model_context *inner)
Definition region-model.h:1163
void purge_state_involving(const svalue *sval) override
Definition region-model.h:1080
void on_liveness_change(const svalue_set &live_svalues, const region_model *model) override
Definition region-model.h:1011
void on_unexpected_tree_code(tree t, const dump_location_t &loc) override
Definition region-model.h:1059
void on_escaped_function(tree fndecl) override
Definition region-model.h:1066
bool warn_at(std::unique_ptr< pending_diagnostic > d, pending_location &&ploc) override
Definition region-model.h:989
void terminate_path() override
Definition region-model.h:1092
void on_unknown_change(const svalue *sval, bool is_mutable) override
Definition region-model.h:1047
void on_unusable_in_infinite_loop() override
Definition region-model.h:1156
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:1106
Definition region-model.h:748
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:852
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:844
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:859
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:294
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:480
constraint_manager * get_constraints()
Definition region-model.h:475
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:495
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:725
const exception_node * get_current_thrown_exception() const
Definition region-model.h:597
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:723
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:304
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:611
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:730
tristate compare_initial_and_pointer(const initial_svalue *init, const region_svalue *ptr) const
exception_node pop_thrown_exception()
Definition region-model.h:603
const function * get_current_function() const
const svalue * get_store_bytes(const region *base_reg, const byte_range &bytes, 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=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:593
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:296
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:384
std::unique_ptr< json::object > to_json() const
region_model_manager *const m_mgr
Definition region-model.h:721
const frame_region * m_current_frame
Definition region-model.h:727
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:494
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:615
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
void update_for_null_return(const call_details &cd, bool unmergeable)
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:729
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:481
dynamic_extents_t m_dynamic_extents
Definition region-model.h:736
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:621
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:484
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:1256
virtual void dump_to_pp(pretty_printer *pp) const =0
rejected_constraint(const region_model &model)
Definition region-model.h:1262
const region_model & get_model() const
Definition region-model.h:1259
region_model m_model
Definition region-model.h:1266
void dump_to_pp(pretty_printer *pp) const final override
rejected_default_case(const region_model &model)
Definition region-model.h:1288
const svalue * m_lhs
Definition region-model.h:1280
void dump_to_pp(pretty_printer *pp) const final override
enum tree_code m_op
Definition region-model.h:1281
rejected_op_constraint(const region_model &model, const svalue *lhs, enum tree_code op, const svalue *rhs)
Definition region-model.h:1272
const svalue * m_rhs
Definition region-model.h:1282
void dump_to_pp(pretty_printer *pp) const final override
tree m_expr
Definition region-model.h:1307
const bounded_ranges * m_ranges
Definition region-model.h:1308
rejected_ranges_constraint(const region_model &model, tree expr, const bounded_ranges *ranges)
Definition region-model.h:1298
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:970
bool had_errors_p() const
Definition region-model.h:967
void on_unexpected_tree_code(tree, const dump_location_t &) final override
Definition region-model.h:961
tentative_region_model_context()
Definition region-model.h:959
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
std::unique_ptr< pending_diagnostic > make_write_to_const_diagnostic(const region *dest_reg, tree decl)
@ stmt
Definition checker-event.h:38
std::unique_ptr< pending_diagnostic > make_shift_count_negative_diagnostic(const gassign *assign, tree count_cst, const region *src_region)
access_direction
Definition common.h:377
std::unique_ptr< pending_diagnostic > make_poisoned_value_diagnostic(tree expr, enum poison_kind pkind, const region *src_region, tree check_expr)
std::unique_ptr< pending_diagnostic > make_write_to_string_literal_diagnostic(const region *reg)
poison_kind
Definition svalue.h:446
std::unique_ptr< pending_diagnostic > make_shift_count_overflow_diagnostic(const gassign *assign, int operand_precision, tree count_cst, const region *src_region)
hash_set< const svalue * > svalue_set
Definition common.h:76
memory_space
Definition region.h:33
Definition custom-sarif-properties/state-graphs.h:33
Definition fold-const.cc:4353
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:253
exception_node(const svalue *exception_sval, const svalue *typeinfo_sval, const svalue *destructor_sval)
Definition region-model.h:254
const svalue * m_exception_sval
Definition region-model.h:279
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:280
const svalue * m_destructor_sval
Definition region-model.h:281
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:1240
const program_state * m_state_a
Definition region-model.h:1244
const region_model * m_model_a
Definition region-model.h:1238
const extrinsic_state * m_ext_state
Definition region-model.h:1243
hash_set< const svalue * > m_svals_changing_meaning
Definition region-model.h:1247
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:1205
const program_state * m_state_b
Definition region-model.h:1245
const supernode * get_supernode() const
Definition region-model.h:1231
bool mergeable_svalue_p(const svalue *) const
void dump(bool simple) const
region_model_manager * get_manager() const
Definition region-model.h:1224
void on_widening_reuse(const widening_svalue *widening_sval)
region_model * m_merged_model
Definition region-model.h:1241
void dump(FILE *fp, bool simple) const
const region_model * m_model_b
Definition region-model.h:1239
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 genautomata.cc:499
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:1191
static bitmap visited
Definition tree-ssa-dce.cc:664
static control_dependences * cd
Definition tree-ssa-dce.cc:105
const char * get_tree_code_name(enum tree_code code)
Definition tree.cc:13053
#define TREE_CODE(NODE)
Definition tree.h:325
tree size_in_bytes(const_tree t)
Definition tree.h:5283
#define FOR_EACH_VEC_ELT(V, I, P)
Definition vec.h:1895