21#ifndef GCC_ANALYZER_COMMON_H
22#define GCC_ANALYZER_COMMON_H
36#include "rich-location.h"
51 class switch_cfg_superedge;
52 class eh_dispatch_cfg_superedge;
53 class eh_dispatch_try_cfg_superedge;
54 class eh_dispatch_allowed_cfg_superedge;
55 class callgraph_superedge;
57 class return_superedge;
61 class constant_svalue;
63 class poisoned_svalue;
69 class repeated_svalue;
70 class bits_within_svalue;
71 class unmergeable_svalue;
72 class placeholder_svalue;
73 class widening_svalue;
74 class compound_svalue;
75 class conjured_svalue;
76 class asm_output_svalue;
77 class const_fn_result_svalue;
128class exploded_cluster;
160extern int tree_cmp (
const void *p1,
const void *p2);
225 const svalue *num_bytes_sval);
362 std::unique_ptr<known_function>) = 0;
425 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
440extern std::unique_ptr<json::value>
443extern std::unique_ptr<json::value>
446extern std::unique_ptr<json::value>
449extern std::unique_ptr<json::value>
472 unsigned int num_args,
473 bool look_in_std =
false);
476 const gcall &call,
unsigned int num_args);
480 const gcall &call,
unsigned int num_args);
493 unsigned HOST_WIDE_INT n,
494 const char *singular_fmt,
495 const char *plural_fmt, ...);
512template <
typename Type>
529template <
typename Type>
542 static inline bool is_deleted (Type t) {
return t.is_deleted (); }
543 static inline bool is_empty (Type t) {
return t.is_empty (); }
563 for (
typename inner_map_t::iterator iter =
m_inner_map.begin ();
565 delete (*iter).second;
596#pragma GCC diagnostic ignored "-Wformat-diag"
Definition analysis-plan.h:35
Definition constraint-manager.h:181
virtual enum built_in_function builtin_code() const =0
const builtin_known_function * dyn_cast_builtin_kf() const final override
Definition common.h:322
tree builtin_decl() const
Definition common.h:316
Definition call-details.h:29
Definition call-summary.h:68
Definition call-summary.h:34
Definition checker-event.h:97
Definition checker-path.h:32
Definition constraint-manager.h:425
virtual bool update_state(program_state *state, const exploded_edge *eedge, region_model_context *ctxt) const
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 void add_events_to_path(checker_path *emission_path, const exploded_edge &eedge) const =0
virtual ~custom_edge_info()
Definition common.h:384
Definition region-model.h:1338
Definition constraint-manager.h:255
Definition exploded-graph.h:394
Definition exploded-graph.h:804
Definition exploded-graph.h:203
Definition exploded-graph.h:965
Definition program-state.h:31
Definition exploded-graph.h:993
Definition feasible-graph.h:84
Definition program-point.h:73
Definition exploded-graph.h:39
bool matches_call_types_p(const call_details &) const final override
Definition common.h:330
Definition known-function-manager.h:41
virtual void impl_call_post(const call_details &) const
Definition common.h:301
virtual void impl_call_pre(const call_details &) const
Definition common.h:297
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:307
virtual ~known_function()
Definition common.h:295
Definition analyzer-logging.h:34
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:422
bool operator==(const path_var &other) const
Definition common.h:177
int m_stack_depth
Definition common.h:191
path_var(tree t, int stack_depth)
Definition common.h:171
void dump(pretty_printer *pp) const
tree m_tree
Definition common.h:190
Definition pending-diagnostic.h:190
Definition pending-diagnostic.h:430
virtual void register_state_machine(std::unique_ptr< state_machine >)=0
virtual logger * get_logger() const =0
virtual void register_known_function(const char *name, std::unique_ptr< known_function >)=0
Definition program-point.h:175
Definition program-state.h:221
void impl_call_pre(const call_details &cd) const override
Definition region-model-reachability.h:36
Definition region-model.h:815
Definition region-model-manager.h:32
Definition region-model.h:298
bit_offset_t get_bit_offset() const
Definition common.h:232
bool symbolic_p() const
Definition common.h:230
const region * get_base_region() const
Definition common.h:227
bit_offset_t m_offset
Definition common.h:275
static region_offset make_byte_offset(const region *base_region, const svalue *num_bytes_sval)
const svalue * m_sym_offset
Definition common.h:276
static region_offset make_concrete(const region *base_region, bit_offset_t offset)
Definition common.h:214
void dump_to_pp(pretty_printer *pp, bool) const
region_offset()
Definition common.h:209
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:269
bool operator==(const region_offset &other) const
Definition common.h:258
const svalue & calc_symbolic_bit_offset(region_model_manager *mgr) const
const region * m_base_region
Definition common.h:274
bool get_concrete_byte_offset(byte_offset_t *out) const
Definition common.h:238
static region_offset make_symbolic(const region *base_region, const svalue *sym_offset)
Definition common.h:219
const svalue * get_symbolic_byte_offset() const
Definition common.h:249
bool concrete_p() const
Definition common.h:229
Definition region-model.h:1278
Definition exploded-graph.h:470
Definition diagnostic-manager.h:31
Definition program-state.h:89
Definition checker-event.h:354
Definition state-purge.h:78
Definition state-purge.h:194
Definition state-purge.h:162
Definition exploded-graph.h:1051
Definition region-model.h:222
Definition checker-event.h:790
~auto_cfun()
Definition common.h:507
auto_cfun(function *fun)
Definition common.h:506
inner_map_t::iterator iterator
Definition common.h:557
inner_map_t m_inner_map
Definition common.h:590
T * get(const key_t &k) const
Definition common.h:570
T::key_t key_t
Definition common.h:554
~consolidation_map()
Definition common.h:561
iterator begin() const
Definition common.h:586
T instance_t
Definition common.h:555
hash_map< key_t, instance_t * > inner_map_t
Definition common.h:556
void put(const key_t &k, T *instance)
Definition common.h:579
size_t elements() const
Definition common.h:584
iterator end() const
Definition common.h:587
Definition diagnostic-event-id.h:37
Definition genmatch.cc:1506
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_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:2008
void push_cfun(struct function *new_cfun)
Definition function.cc:4758
void pop_cfun(void)
Definition function.cc:4784
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:197
@ stmt
Definition checker-event.h:37
@ state_change
Definition checker-event.h:40
bool operator>(const region_offset &, const region_offset &)
offset_int bit_offset_t
Definition common.h:194
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:369
@ read
Definition common.h:370
@ write
Definition common.h:371
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)
offset_int byte_offset_t
Definition common.h:196
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:195
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:78
void register_varargs_builtins(known_function_manager &kfm)
std::unique_ptr< json::value > diagnostic_event_id_to_json(const diagnostic_event_id_t &)
void register_known_fd_functions(known_function_manager &kfm)
int readability_comparator(const void *p1, const void *p2)
void register_known_file_functions(known_function_manager &kfm)
void print_quoted_type(pretty_printer *pp, tree t)
Definition constraint-manager.h:123
Definition event-loc-info.h:29
Definition pending-diagnostic.h:38
Definition region-model.h:1229
Definition diagnostic-manager.h:108
Definition exploded-graph.h:678
Definition tree-loop-distribution.cc:240
Definition function.h:249
static void mark_empty(Type &t)
Definition common.h:541
static hashval_t hash(value_type v)
Definition common.h:534
Type compare_type
Definition common.h:533
Type value_type
Definition common.h:532
static bool equal(const value_type &existing, const value_type &candidate)
Definition common.h:535
static void mark_deleted(Type &t)
Definition common.h:540
static bool is_empty(Type t)
Definition common.h:543
static bool is_deleted(Type t)
Definition common.h:542
static void mark_deleted(Type &)
Type compare_type
Definition common.h:516
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:515
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 NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:814
#define bool
Definition system.h:886
@ END_BUILTINS
Definition tree-core.h:3541
static tree candidate(unsigned uid)
Definition tree-sra.cc:326
static control_dependences * cd
Definition tree-ssa-dce.cc:104
#define NULL_TREE
Definition tree.h:317