21#ifndef GCC_ANALYZER_COMMON_H
22#define GCC_ANALYZER_COMMON_H
25#define INCLUDE_ALGORITHM
41#include "rich-location.h"
59 class constant_svalue;
61 class poisoned_svalue;
67 class repeated_svalue;
68 class bits_within_svalue;
69 class unmergeable_svalue;
70 class placeholder_svalue;
71 class widening_svalue;
72 class compound_svalue;
73 class conjured_svalue;
74 class asm_output_svalue;
75 class const_fn_result_svalue;
125class exploded_cluster;
154class translation_unit;
164extern int tree_cmp (
const void *p1,
const void *p2);
189 return (
m_tree == other.m_tree
235 const svalue *num_bytes_sval);
394 const region *region_holding_value)
411 return !(*
this == other);
437 const char *&out_color)
const;
483 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
498extern std::unique_ptr<json::value>
501extern std::unique_ptr<json::value>
504extern std::unique_ptr<json::value>
507extern std::unique_ptr<json::value>
530 unsigned int num_args,
531 bool look_in_std =
false);
534 const gcall &call,
unsigned int num_args);
538 const gcall &call,
unsigned int num_args);
552 unsigned HOST_WIDE_INT n,
553 const char *singular_fmt,
554 const char *plural_fmt, ...);
571template <
typename Type>
588template <
typename Type>
601 static inline bool is_deleted (Type t) {
return t.is_deleted (); }
602 static inline bool is_empty (Type t) {
return t.is_empty (); }
622 for (
typename inner_map_t::iterator iter =
m_inner_map.begin ();
624 delete (*iter).second;
655#pragma GCC diagnostic ignored "-Wformat-diag"
663namespace analyzer_events {
672 const ana::translation_unit &
m_tu;
686 std::unique_ptr<ana::known_function>)
const = 0;
Definition analysis-plan.h:35
Definition constraint-manager.h:178
virtual enum built_in_function builtin_code() const =0
const builtin_known_function * dyn_cast_builtin_kf() const final override
Definition common.h:341
tree builtin_decl() const
Definition common.h:335
Definition call-details.h:31
Definition call-summary.h:68
Definition call-summary.h:34
Definition checker-event.h:100
Definition checker-path.h:32
Definition constraint-manager.h:410
virtual bool update_state(program_state *state, const exploded_edge *eedge, region_model_context *ctxt) const
virtual void get_dot_attrs(const char *&out_style, const char *&out_color) const
virtual bool try_to_rewind_data_flow(rewind_context &) const
Definition common.h:462
virtual void add_events_to_path(checker_path *emission_path, const exploded_edge &eedge, pending_diagnostic &pd, const state_transition *state_trans) const =0
virtual bool update_model(region_model *model, const exploded_edge *eedge, region_model_context *ctxt) const =0
virtual exploded_node * create_enode(exploded_graph &eg, const program_point &point, program_state &&state, exploded_node *enode_for_diag, region_model_context *ctxt) const
virtual void print(pretty_printer *pp) const =0
virtual ~custom_edge_info()
Definition common.h:430
Definition region-model.h:1314
Definition constraint-manager.h:240
Definition exploded-graph.h:335
Definition exploded-graph.h:794
Definition exploded-graph.h:206
Definition exploded-path.h:33
Definition program-state.h:34
Definition exploded-graph.h:943
Definition exploded-graph.h:963
Definition feasible-graph.h:84
Definition exploded-graph.h:40
bool matches_call_types_p(const call_details &) const final override
Definition common.h:349
Definition known-function-manager.h:41
virtual void impl_call_post(const call_details &) const
Definition common.h:320
virtual void impl_call_pre(const call_details &) const
Definition common.h:316
virtual bool matches_call_types_p(const call_details &cd) const =0
virtual const builtin_known_function * dyn_cast_builtin_kf() const
Definition common.h:326
virtual ~known_function()
Definition common.h:305
virtual void check_any_preconditions(const call_details &) const
Definition common.h:311
Definition analyzer-logging.h:36
virtual bool terminate_path_p() const =0
virtual void bifurcate(std::unique_ptr< custom_edge_info > info)=0
virtual void terminate_path()=0
virtual ~path_context()
Definition common.h:480
bool operator==(const path_var &other) const
Definition common.h:187
int m_stack_depth
Definition common.h:201
path_var(tree t, int stack_depth)
Definition common.h:181
void dump(pretty_printer *pp) const
tree m_tree
Definition common.h:200
Definition pending-diagnostic.h:258
Definition pending-diagnostic.h:546
Definition program-point.h:54
Definition program-state.h:224
void impl_call_pre(const call_details &cd) const override
Definition region-model-reachability.h:36
Definition region-model.h:748
Definition region-model-manager.h:32
Definition region-model.h:294
bit_offset_t get_bit_offset() const
Definition common.h:242
bool symbolic_p() const
Definition common.h:240
const region * get_base_region() const
Definition common.h:237
bit_offset_t m_offset
Definition common.h:285
static region_offset make_byte_offset(const region *base_region, const svalue *num_bytes_sval)
const svalue * m_sym_offset
Definition common.h:286
static region_offset make_concrete(const region *base_region, bit_offset_t offset)
Definition common.h:224
void dump_to_pp(pretty_printer *pp, bool) const
region_offset()
Definition common.h:219
const svalue * calc_symbolic_byte_offset(region_model_manager *mgr) const
region_offset(const region *base_region, bit_offset_t offset, const svalue *sym_offset)
Definition common.h:279
bool operator==(const region_offset &other) const
Definition common.h:268
const svalue & calc_symbolic_bit_offset(region_model_manager *mgr) const
const region * m_base_region
Definition common.h:284
bool get_concrete_byte_offset(byte_offset_t *out) const
Definition common.h:248
static region_offset make_symbolic(const region *base_region, const svalue *sym_offset)
Definition common.h:229
const svalue * get_symbolic_byte_offset() const
Definition common.h:259
bool concrete_p() const
Definition common.h:239
Definition region-model.h:1254
Definition exploded-graph.h:457
Definition diagnostic-manager.h:79
Definition program-state.h:92
Definition checker-event.h:417
Definition state-purge.h:31
Definition state-purge.h:152
Definition state-purge.h:119
Definition state-transition.h:99
Definition state-transition.h:126
Definition state-transition.h:31
Definition region-model.h:223
Definition checker-event.h:931
~auto_cfun()
Definition common.h:566
auto_cfun(function *fun)
Definition common.h:565
inner_map_t::iterator iterator
Definition common.h:616
inner_map_t m_inner_map
Definition common.h:649
T * get(const key_t &k) const
Definition common.h:629
T::key_t key_t
Definition common.h:613
~consolidation_map()
Definition common.h:620
iterator begin() const
Definition common.h:645
T instance_t
Definition common.h:614
hash_map< key_t, instance_t * > inner_map_t
Definition common.h:615
void put(const key_t &k, T *instance)
Definition common.h:638
size_t elements() const
Definition common.h:643
iterator end() const
Definition common.h:646
Definition genmatch.cc:1506
Definition graphviz.h:388
Definition pretty-print.h:241
Definition lra-spills.cc:101
bool is_named_call_p(const_tree fndecl, const char *funcname)
bool is_cxa_rethrow_p(const gcall &call)
bool is_std_function_p(const_tree fndecl)
bool is_placement_new_p(const gcall &call)
bool is_setjmp_call_p(const gcall &call)
void sorry_no_analyzer()
Definition analyzer-pass.cc:104
bool is_std_named_call_p(const_tree fndecl, const char *funcname)
label_text make_label_text_n(bool can_colorize, unsigned HOST_WIDE_INT n, const char *singular_fmt, const char *plural_fmt,...)
bool is_cxa_end_catch_p(const gcall &call)
bool is_cxa_throw_p(const gcall &call)
bool fndecl_has_gimple_body_p(tree fndecl)
label_text make_label_text(bool can_colorize, const char *fmt,...)
const char * get_user_facing_name(const gcall &call)
bool is_special_named_call_p(const gcall &call, const char *funcname, unsigned int num_args, bool look_in_std=false)
void register_analyzer_pass()
bool is_longjmp_call_p(const gcall &call)
const union tree_node * const_tree
Definition coretypes.h:98
union tree_node * tree
Definition coretypes.h:97
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2009
void push_cfun(struct function *new_cfun)
Definition function.cc:4765
void pop_cfun(void)
Definition function.cc:4791
static struct token T
Definition gengtype-parse.cc:45
static void record_type(type_p type)
Definition gengtype-state.cc:1426
built_in_function
Definition genmatch.cc:1009
tree_code
Definition genmatch.cc:1002
Definition access-diagram.h:30
bool compat_types_p(tree src_type, tree dst_type)
void register_known_functions_lang_cp(known_function_manager &kfm)
void register_known_functions(known_function_manager &kfm, region_model_manager &rmm)
std::unique_ptr< json::value > byte_offset_to_json(const byte_offset_t &offset)
std::unique_ptr< json::value > bit_offset_to_json(const bit_offset_t &offset)
offset_int byte_size_t
Definition common.h:207
@ stmt
Definition checker-event.h:38
@ state_change
Definition checker-event.h:42
bool operator>(const region_offset &, const region_offset &)
offset_int bit_offset_t
Definition common.h:204
tree fixup_tree_for_diagnostic(tree)
void dump_tree(pretty_printer *pp, tree t)
bool operator>=(const region_offset &, const region_offset &)
tree get_string_cst_size(const_tree string_cst)
bool operator<(const region_offset &, const region_offset &)
void register_known_analyzer_functions(known_function_manager &kfm)
access_direction
Definition common.h:377
@ read
Definition common.h:378
@ write
Definition common.h:379
bool operator<=(const region_offset &, const region_offset &)
tree get_field_at_bit_offset(tree record_type, bit_offset_t bit_offset)
void print_expr_for_user(pretty_printer *pp, tree t)
tristate compare_constants(tree lhs_const, enum tree_code op, tree rhs_const)
tree get_stashed_constant_by_name(const char *name)
bool int_size_in_bits(const_tree type, bit_size_t *out)
std::unique_ptr< json::value > tree_to_json(tree node)
tree get_ssa_default_def(const function &fun, tree var)
std::unique_ptr< json::value > diagnostic_event_id_to_json(const diagnostics::paths::event_id_t &)
offset_int byte_offset_t
Definition common.h:206
location_t get_stmt_location(const gimple *stmt, function *fun)
const svalue * strip_types(const svalue *sval, region_model_manager &mgr)
FILE * get_or_create_any_logfile()
void dump_quoted_tree(pretty_printer *pp, tree t)
void log_stashed_constants(logger *logger)
offset_int bit_size_t
Definition common.h:205
int tree_cmp(const void *p1, const void *p2)
tree remove_ssa_names(tree expr)
tree get_diagnostic_tree_for_gassign(const gassign *)
hash_set< const svalue * > svalue_set
Definition common.h:76
void register_varargs_builtins(known_function_manager &kfm)
bool printable_expr_p(const_tree expr)
void register_known_fd_functions(known_function_manager &kfm)
int readability_comparator(const void *p1, const void *p2)
bool useful_location_p(location_t loc)
Definition common.h:169
void register_known_file_functions(known_function_manager &kfm)
void print_quoted_type(pretty_printer *pp, tree t)
Definition custom-sarif-properties/state-graphs.h:33
diagnostic_event_id_t event_id_t
Definition event-id.h:66
Definition constraint-manager.h:123
diagnostic_state(std::string debug_desc, const region *region_holding_value)
Definition common.h:393
bool operator!=(const diagnostic_state &other) const
Definition common.h:409
void dump_to_pp(pretty_printer *) const
bool operator==(const diagnostic_state &other) const
Definition common.h:404
std::string m_debug_desc
Definition common.h:414
const region * m_region_holding_value
Definition common.h:415
diagnostic_state()
Definition common.h:388
Definition event-loc-info.h:29
Definition pending-diagnostic.h:42
Definition region-model.h:1204
Definition diagnostic-manager.h:35
Definition exploded-graph.h:669
Definition tree-loop-distribution.cc:240
Definition function.h:249
virtual void register_state_machine(std::unique_ptr< ana::state_machine >) const =0
virtual void register_known_function(const char *name, std::unique_ptr< ana::known_function >) const =0
virtual ana::logger * get_logger() const =0
const ana::region_model * m_old_model
Definition common.h:698
const ana::svalue * m_retval
Definition common.h:699
const ana::region_model * m_new_model
Definition common.h:697
ana::region_model_context * m_ctxt
Definition common.h:700
ana::logger * m_logger
Definition common.h:671
const ana::translation_unit & m_tu
Definition common.h:672
virtual ~subscriber()=default
virtual void on_message(const on_frame_popped &)
Definition common.h:709
virtual void on_message(const on_ana_init &)
Definition common.h:708
virtual void on_message(const on_tu_finished &)
Definition common.h:707
static void mark_empty(Type &t)
Definition common.h:600
static hashval_t hash(value_type v)
Definition common.h:593
Type compare_type
Definition common.h:592
Type value_type
Definition common.h:591
static bool equal(const value_type &existing, const value_type &candidate)
Definition common.h:594
static void mark_deleted(Type &t)
Definition common.h:599
static bool is_empty(Type t)
Definition common.h:602
static bool is_deleted(Type t)
Definition common.h:601
Definition ira-emit.cc:158
static void mark_deleted(Type &)
Type compare_type
Definition common.h:575
static bool is_empty(Type)
static bool equal(const value_type &existing, const value_type &candidate)
static bool is_deleted(Type)
Type value_type
Definition common.h:574
static hashval_t hash(value_type)
static void mark_empty(Type &)
Definition genautomata.cc:669
Definition gengtype.h:252
Definition hash-traits.h:75
#define gcc_assert(EXPR)
Definition system.h:817
#define bool
Definition system.h:889
@ END_BUILTINS
Definition tree-core.h:3548
static tree candidate(unsigned uid)
Definition tree-sra.cc:326
static control_dependences * cd
Definition tree-ssa-dce.cc:105
#define NULL_TREE
Definition tree.h:318