21#ifndef GCC_ANALYZER_ANALYZER_H
22#define GCC_ANALYZER_ANALYZER_H
24#include "rich-location.h"
39 class switch_cfg_superedge;
40 class callgraph_superedge;
42 class return_superedge;
46 class constant_svalue;
48 class poisoned_svalue;
54 class repeated_svalue;
55 class bits_within_svalue;
56 class unmergeable_svalue;
57 class placeholder_svalue;
58 class widening_svalue;
59 class compound_svalue;
60 class conjured_svalue;
61 class asm_output_svalue;
62 class const_fn_result_svalue;
347 std::unique_ptr<known_function>) = 0;
404 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
451 unsigned int num_args,
455 const gcall *call,
unsigned int num_args);
459 const gcall *call,
unsigned int num_args);
489template <
typename Type>
506template <
typename Type>
542 delete (*iter).second;
573#pragma GCC diagnostic ignored "-Wformat-diag"
bool is_named_call_p(const_tree fndecl, const char *funcname)
const char * get_user_facing_name(const gcall *call)
bool is_std_function_p(const_tree fndecl)
void sorry_no_analyzer()
Definition analyzer-pass.cc:110
bool is_longjmp_call_p(const gcall *call)
bool is_std_named_call_p(const_tree fndecl, const char *funcname)
bool is_setjmp_call_p(const gcall *call)
bool is_special_named_call_p(const gcall *call, const char *funcname, unsigned int num_args, bool look_in_std=false)
label_text make_label_text_n(bool can_colorize, unsigned HOST_WIDE_INT n, const char *singular_fmt, const char *plural_fmt,...)
bool fndecl_has_gimple_body_p(tree fndecl)
label_text make_label_text(bool can_colorize, const char *fmt,...)
bool is_placement_new_p(const gcall *call)
void register_analyzer_pass()
Definition analysis-plan.h:35
Definition constraint-manager.h:175
Definition analyzer.h:298
virtual enum built_in_function builtin_code() const =0
const builtin_known_function * dyn_cast_builtin_kf() const final override
Definition analyzer.h:307
tree builtin_decl() const
Definition analyzer.h:301
Definition call-details.h:29
Definition call-summary.h:68
Definition call-summary.h:34
Definition checker-event.h:101
Definition checker-path.h:31
Definition constraint-manager.h:408
Definition analyzer.h:367
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 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 analyzer.h:369
Definition region-model.h:1225
Definition constraint-manager.h:249
Definition exploded-graph.h:381
Definition exploded-graph.h:791
Definition exploded-graph.h:203
Definition exploded-graph.h:947
Definition program-state.h:29
Definition exploded-graph.h:975
Definition feasible-graph.h:84
Definition program-point.h:73
Definition exploded-graph.h:39
Definition analyzer.h:313
bool matches_call_types_p(const call_details &) const final override
Definition analyzer.h:315
Definition known-function-manager.h:41
Definition analyzer.h:278
virtual void impl_call_post(const call_details &) const
Definition analyzer.h:286
virtual void impl_call_pre(const call_details &) const
Definition analyzer.h:282
virtual bool matches_call_types_p(const call_details &cd) const =0
virtual const builtin_known_function * dyn_cast_builtin_kf() const
Definition analyzer.h:292
virtual ~known_function()
Definition analyzer.h:280
Definition analyzer-logging.h:34
Definition analyzer.h:399
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 analyzer.h:401
Definition analyzer.h:154
bool operator==(const path_var &other) const
Definition analyzer.h:162
int m_stack_depth
Definition analyzer.h:176
path_var(tree t, int stack_depth)
Definition analyzer.h:156
void dump(pretty_printer *pp) const
tree m_tree
Definition analyzer.h:175
Definition pending-diagnostic.h:208
Definition pending-diagnostic.h:441
Definition analyzer.h:343
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:203
Definition analyzer.h:327
void impl_call_pre(const call_details &cd) const override
Definition region-model-reachability.h:36
Definition region-model.h:702
Definition region-model-manager.h:32
Definition region-model.h:258
Definition analyzer.h:192
bit_offset_t get_bit_offset() const
Definition analyzer.h:217
bool symbolic_p() const
Definition analyzer.h:215
const region * get_base_region() const
Definition analyzer.h:212
bit_offset_t m_offset
Definition analyzer.h:260
static region_offset make_byte_offset(const region *base_region, const svalue *num_bytes_sval)
const svalue * m_sym_offset
Definition analyzer.h:261
static region_offset make_concrete(const region *base_region, bit_offset_t offset)
Definition analyzer.h:199
void dump_to_pp(pretty_printer *pp, bool) const
region_offset()
Definition analyzer.h:194
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 analyzer.h:254
bool operator==(const region_offset &other) const
Definition analyzer.h:243
const svalue & calc_symbolic_bit_offset(region_model_manager *mgr) const
const region * m_base_region
Definition analyzer.h:259
bool get_concrete_byte_offset(byte_offset_t *out) const
Definition analyzer.h:223
static region_offset make_symbolic(const region *base_region, const svalue *sym_offset)
Definition analyzer.h:204
const svalue * get_symbolic_byte_offset() const
Definition analyzer.h:234
bool concrete_p() const
Definition analyzer.h:214
Definition region-model.h:1165
Definition exploded-graph.h:457
Definition diagnostic-manager.h:31
Definition program-state.h:75
Definition checker-event.h:359
Definition state-purge.h:78
Definition state-purge.h:194
Definition state-purge.h:162
Definition exploded-graph.h:1033
Definition region-model.h:217
Definition checker-event.h:686
Definition analyzer.h:481
~auto_cfun()
Definition analyzer.h:484
auto_cfun(function *fun)
Definition analyzer.h:483
Definition analyzer.h:529
inner_map_t::iterator iterator
Definition analyzer.h:534
inner_map_t m_inner_map
Definition analyzer.h:567
T * get(const key_t &k) const
Definition analyzer.h:547
T::key_t key_t
Definition analyzer.h:531
~consolidation_map()
Definition analyzer.h:538
iterator begin() const
Definition analyzer.h:563
T instance_t
Definition analyzer.h:532
hash_map< key_t, instance_t * > inner_map_t
Definition analyzer.h:533
void put(const key_t &k, T *instance)
Definition analyzer.h:556
size_t elements() const
Definition analyzer.h:561
iterator end() const
Definition analyzer.h:564
Definition diagnostic-event-id.h:37
Definition genmatch.cc:845
iterator begin() const
Definition hash-map.h:302
size_t elements() const
Definition hash-map.h:247
iterator end() const
Definition hash-map.h:303
bool put(const Key &k, const Value &v)
Definition hash-map.h:168
Definition pretty-print.h:244
Definition lra-spills.cc:101
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:2002
void push_cfun(struct function *new_cfun)
Definition function.cc:4726
void pop_cfun(void)
Definition function.cc:4738
static void record_type(type_p type)
Definition gengtype-state.cc:1426
built_in_function
Definition genmatch.cc:354
@ END_BUILTINS
Definition genmatch.cc:356
tree_code
Definition genmatch.cc:347
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
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)
offset_int byte_size_t
Definition analyzer.h:182
bool operator>(const region_offset &, const region_offset &)
offset_int bit_offset_t
Definition analyzer.h:179
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 analyzer.h:354
@ DIR_WRITE
Definition analyzer.h:356
@ DIR_READ
Definition analyzer.h:355
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)
json::value * diagnostic_event_id_to_json(const diagnostic_event_id_t &)
bool int_size_in_bits(const_tree type, bit_size_t *out)
tree get_ssa_default_def(const function &fun, tree var)
offset_int byte_offset_t
Definition analyzer.h:181
json::value * bit_offset_to_json(const bit_offset_t &offset)
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 analyzer.h:180
int tree_cmp(const void *p1, const void *p2)
json::value * tree_to_json(tree node)
tree remove_ssa_names(tree expr)
tree get_diagnostic_tree_for_gassign(const gassign *)
hash_set< const svalue * > svalue_set
Definition analyzer.h:63
void register_varargs_builtins(known_function_manager &kfm)
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)
json::value * byte_offset_to_json(const byte_offset_t &offset)
void print_quoted_type(pretty_printer *pp, tree t)
rtx offset
Definition postreload.cc:691
Definition constraint-manager.h:120
Definition checker-event.h:32
Definition pending-diagnostic.h:38
Definition region-model.h:1116
Definition diagnostic-manager.h:108
Definition exploded-graph.h:665
Definition tree-loop-distribution.cc:240
Definition function.h:249
Definition analyzer.h:508
static void mark_empty(Type &t)
Definition analyzer.h:518
static hashval_t hash(value_type v)
Definition analyzer.h:511
Type compare_type
Definition analyzer.h:510
Type value_type
Definition analyzer.h:509
static bool equal(const value_type &existing, const value_type &candidate)
Definition analyzer.h:512
static void mark_deleted(Type &t)
Definition analyzer.h:517
static bool is_empty(Type t)
Definition analyzer.h:520
static bool is_deleted(Type t)
Definition analyzer.h:519
Definition analyzer.h:491
static void mark_deleted(Type &)
Type compare_type
Definition analyzer.h:493
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 analyzer.h:492
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:821
#define bool
Definition system.h:893
static tree candidate(unsigned uid)
Definition tree-sra.cc:325
static control_dependences * cd
Definition tree-ssa-dce.cc:102
#define NULL_TREE
Definition tree.h:317