GCC Middle and Back End API Reference
common.h
Go to the documentation of this file.
1/* Base header for the analyzer, plus utility functions.
2 Copyright (C) 2019-2026 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 3, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful, but
13WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#ifndef GCC_ANALYZER_COMMON_H
22#define GCC_ANALYZER_COMMON_H
23
24#include "config.h"
25#define INCLUDE_MAP
26#define INCLUDE_SET
27#define INCLUDE_STRING
28#define INCLUDE_VECTOR
29#include "system.h"
30#include "coretypes.h"
31#include "tree.h"
32#include "function.h"
33#include "basic-block.h"
34#include "gimple.h"
35#include "options.h"
36#include "bitmap.h"
37#include "diagnostic-core.h"
38#include "diagnostics/paths.h"
39#include "rich-location.h"
40#include "function.h"
41#include "json.h"
42#include "tristate.h"
43
44class graphviz_out;
45
46namespace ana {
47
48/* Forward decls of common types, with indentation to show inheritance. */
49
50class supergraph;
51class supernode;
52class superedge;
53
54class svalue;
55 class region_svalue;
56 class constant_svalue;
57 class unknown_svalue;
58 class poisoned_svalue;
59 class setjmp_svalue;
60 class initial_svalue;
61 class unaryop_svalue;
62 class binop_svalue;
63 class sub_svalue;
64 class repeated_svalue;
65 class bits_within_svalue;
66 class unmergeable_svalue;
67 class placeholder_svalue;
68 class widening_svalue;
69 class compound_svalue;
70 class conjured_svalue;
71 class asm_output_svalue;
72 class const_fn_result_svalue;
74class region;
75 class frame_region;
76 class function_region;
77 class label_region;
78 class decl_region;
79 class symbolic_region;
80 class element_region;
81 class offset_region;
82 class sized_region;
83 class cast_region;
84 class field_region;
85 class string_region;
86 class bit_range_region;
87 class var_arg_region;
89class conjured_purge;
90struct model_merger;
91class store_manager;
92class store;
93class region_model;
96class call_details;
99class equiv_class;
101class bounded_ranges;
103
104struct pending_location;
106class pending_note;
107class saved_diagnostic;
108struct event_loc_info;
109class checker_event;
110 class state_change_event;
111 class warning_event;
112class checker_path;
113class extrinsic_state;
114class sm_state_map;
115class program_point;
116class program_state;
117class exploded_graph;
118class exploded_node;
119class exploded_edge;
122class exploded_cluster;
123class exploded_path;
124class analysis_plan;
125class state_purge_map;
128class state_change;
129class rewind_info_t;
130
131class engine;
132class state_machine;
133class logger;
134class visitor;
136class call_summary;
138struct per_function_data;
139struct interesting_t;
140class uncertainty_t;
141
142class feasible_node;
143
144class known_function;
147
148/* Forward decls of functions. */
149
150extern void dump_tree (pretty_printer *pp, tree t);
154extern int readability_comparator (const void *p1, const void *p2);
155extern int tree_cmp (const void *p1, const void *p2);
158
159inline bool
160useful_location_p (location_t loc)
161{
162 return get_pure_location (loc) != UNKNOWN_LOCATION;
163}
164
165/* A tree, extended with stack frame information for locals, so that
166 we can distinguish between different values of locals within a potentially
167 recursive callstack. */
168
170{
171public:
172 path_var (tree t, int stack_depth)
173 : m_tree (t), m_stack_depth (stack_depth)
174 {
175 // TODO: ignore stack depth for globals and constants
176 }
177
178 bool operator== (const path_var &other) const
179 {
180 return (m_tree == other.m_tree
181 && m_stack_depth == other.m_stack_depth);
182 }
183
184 operator bool () const
185 {
186 return m_tree != NULL_TREE;
187 }
188
189 void dump (pretty_printer *pp) const;
190
192 int m_stack_depth; // or -1 for globals?
193};
194
195typedef offset_int bit_offset_t;
196typedef offset_int bit_size_t;
197typedef offset_int byte_offset_t;
198typedef offset_int byte_size_t;
199
201
203
204/* The location of a region expressesd as an offset relative to a
205 base region. */
206
208{
209public:
211 : m_base_region (nullptr), m_offset (0), m_sym_offset (nullptr)
212 {
213 }
214
215 static region_offset make_concrete (const region *base_region,
216 bit_offset_t offset)
217 {
218 return region_offset (base_region, offset, nullptr);
219 }
220 static region_offset make_symbolic (const region *base_region,
221 const svalue *sym_offset)
222 {
223 return region_offset (base_region, 0, sym_offset);
224 }
225 static region_offset make_byte_offset (const region *base_region,
226 const svalue *num_bytes_sval);
227
228 const region *get_base_region () const { return m_base_region; }
229
230 bool concrete_p () const { return m_sym_offset == nullptr; }
231 bool symbolic_p () const { return m_sym_offset != nullptr; }
232
234 {
236 return m_offset;
237 }
238
240 {
242 if (m_offset % BITS_PER_UNIT == 0)
243 {
244 *out = m_offset / BITS_PER_UNIT;
245 return true;
246 }
247 return false;
248 }
249
251 {
253 return m_sym_offset;
254 }
255
258
259 bool operator== (const region_offset &other) const
260 {
261 return (m_base_region == other.m_base_region
262 && m_offset == other.m_offset
263 && m_sym_offset == other.m_sym_offset);
264 }
265
266 void dump_to_pp (pretty_printer *pp, bool) const;
267 void dump (bool) const;
268
269private:
270 region_offset (const region *base_region, bit_offset_t offset,
271 const svalue *sym_offset)
272 : m_base_region (base_region), m_offset (offset), m_sym_offset (sym_offset)
273 {}
274
278};
279
280extern bool operator< (const region_offset &, const region_offset &);
281extern bool operator<= (const region_offset &, const region_offset &);
282extern bool operator> (const region_offset &, const region_offset &);
283extern bool operator>= (const region_offset &, const region_offset &);
284
285extern location_t get_stmt_location (const gimple *stmt, function *fun);
286
287extern bool compat_types_p (tree src_type, tree dst_type);
288
289/* Abstract base class for simulating the behavior of known functions,
290 supplied by the core of the analyzer, or by plugins.
291 The former are typically implemented in the various kf*.cc */
292
294{
295public:
296 virtual ~known_function () {}
297 virtual bool matches_call_types_p (const call_details &cd) const = 0;
298
299 /* A hook for performing additional checks on the expected state
300 at a call. */
301 virtual void
303 {
304 // no-op
305 }
306
307 virtual void impl_call_pre (const call_details &) const
308 {
309 return;
310 }
311 virtual void impl_call_post (const call_details &) const
312 {
313 return;
314 }
315
316 virtual const builtin_known_function *
317 dyn_cast_builtin_kf () const { return nullptr; }
318};
319
320/* Subclass of known_function for builtin functions. */
321
323{
324public:
325 virtual enum built_in_function builtin_code () const = 0;
328 return builtin_info[builtin_code ()].decl;
329 }
330
332 dyn_cast_builtin_kf () const final override { return this; }
333};
334
335/* Subclass of known_function for IFN_* functions. */
336
338{
339public:
340 bool matches_call_types_p (const call_details &) const final override
341 {
342 /* Types are assumed to be correct. */
343 return true;
344 }
345};
346
347/* Abstract subclass of known_function that merely sets the return
348 value of the function (based on function attributes), and assumes
349 it has no side-effects. */
350
352{
353public:
354 void impl_call_pre (const call_details &cd) const override;
355};
356
364
365/* Passed by pointer to PLUGIN_ANALYZER_INIT callbacks. */
366
368{
369public:
370 virtual void register_state_machine (std::unique_ptr<state_machine>) = 0;
371 virtual void register_known_function (const char *name,
372 std::unique_ptr<known_function>) = 0;
373 virtual logger *get_logger () const = 0;
374};
375
376/* An enum for describing the direction of an access to memory. */
377
379{
382};
383
384/* Abstract base class for associating custom data with an
385 exploded_edge, for handling non-standard edges such as
386 rewinding from a longjmp, signal handlers, etc.
387 Also used when "bifurcating" state: splitting the execution
388 path in non-standard ways (e.g. for simulating the various
389 outcomes of "realloc"). */
390
392{
393public:
394 virtual ~custom_edge_info () {}
395
396 /* Hook for making .dot label more readable. */
397 virtual void print (pretty_printer *pp) const = 0;
398
399 virtual void
400 get_dot_attrs (const char *&out_style,
401 const char *&out_color) const;
402
403 /* Hook for updating STATE when handling bifurcation. */
405 const exploded_edge *eedge,
406 region_model_context *ctxt) const;
407
408 /* Hook for updating MODEL within exploded_path::feasible_p
409 and when handling bifurcation. */
410 virtual bool update_model (region_model *model,
411 const exploded_edge *eedge,
412 region_model_context *ctxt) const = 0;
413
414 virtual void add_events_to_path (checker_path *emission_path,
415 const exploded_edge &eedge,
416 pending_diagnostic &pd) const = 0;
417
419 const program_point &point,
421 exploded_node *enode_for_diag,
422 region_model_context *ctxt) const;
423};
424
425/* Abstract base class for splitting state.
426
427 Most of the state-management code in the analyzer involves
428 modifying state objects in-place, which assumes a single outcome.
429
430 This class provides an escape hatch to allow for multiple outcomes
431 for such updates e.g. for modelling multiple outcomes from function
432 calls, such as the various outcomes of "realloc". */
433
435{
436public:
437 virtual ~path_context () {}
438
439 /* Hook for clients to split state with a non-standard path. */
440 virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
441
442 /* Hook for clients to terminate the standard path. */
443 virtual void terminate_path () = 0;
444
445 /* Hook for clients to determine if the standard path has been
446 terminated. */
447 virtual bool terminate_path_p () const = 0;
448};
449
450extern tree get_stashed_constant_by_name (const char *name);
452
454
455extern std::unique_ptr<json::value>
457
458extern std::unique_ptr<json::value>
460
461extern std::unique_ptr<json::value>
463
464extern std::unique_ptr<json::value>
466
467extern tristate
468compare_constants (tree lhs_const, enum tree_code op, tree rhs_const);
469
470extern tree
472
473extern tree
475
476extern const svalue *
478
479extern region_offset
481
483
484} // namespace ana
485
486extern bool is_special_named_call_p (const gcall &call, const char *funcname,
487 unsigned int num_args,
488 bool look_in_std = false);
489extern bool is_named_call_p (const_tree fndecl, const char *funcname);
490extern bool is_named_call_p (const_tree fndecl, const char *funcname,
491 const gcall &call, unsigned int num_args);
492extern bool is_std_function_p (const_tree fndecl);
493extern bool is_std_named_call_p (const_tree fndecl, const char *funcname);
494extern bool is_std_named_call_p (const_tree fndecl, const char *funcname,
495 const gcall &call, unsigned int num_args);
496extern bool is_setjmp_call_p (const gcall &call);
497extern bool is_longjmp_call_p (const gcall &call);
498extern bool is_placement_new_p (const gcall &call);
499extern bool is_cxa_throw_p (const gcall &call);
500extern bool is_cxa_rethrow_p (const gcall &call);
501extern bool is_cxa_end_catch_p (const gcall &call);
502
503extern const char *get_user_facing_name (const gcall &call);
504
506
507extern label_text make_label_text (bool can_colorize, const char *fmt, ...);
508extern label_text make_label_text_n (bool can_colorize,
509 unsigned HOST_WIDE_INT n,
510 const char *singular_fmt,
511 const char *plural_fmt, ...);
512
513extern bool fndecl_has_gimple_body_p (tree fndecl);
514
515/* An RAII-style class for pushing/popping cfun within a scope.
516 Doing so ensures we get "In function " announcements
517 from the diagnostics subsystem. */
518
520{
521public:
522 auto_cfun (function *fun) { push_cfun (fun); }
524};
525
526/* A template for creating hash traits for a POD type. */
527
528template <typename Type>
530{
531 typedef Type value_type;
532 typedef Type compare_type;
533 static inline hashval_t hash (value_type);
534 static inline bool equal (const value_type &existing,
535 const value_type &candidate);
536 static inline void mark_deleted (Type &);
537 static inline void mark_empty (Type &);
538 static inline bool is_deleted (Type);
539 static inline bool is_empty (Type);
540};
541
542/* A hash traits class that uses member functions to implement
543 the various required ops. */
544
545template <typename Type>
547{
548 typedef Type value_type;
549 typedef Type compare_type;
550 static inline hashval_t hash (value_type v) { return v.hash (); }
551 static inline bool equal (const value_type &existing,
552 const value_type &candidate)
553 {
554 return existing == candidate;
555 }
556 static inline void mark_deleted (Type &t) { t.mark_deleted (); }
557 static inline void mark_empty (Type &t) { t.mark_empty (); }
558 static inline bool is_deleted (Type t) { return t.is_deleted (); }
559 static inline bool is_empty (Type t) { return t.is_empty (); }
560};
561
562/* A map from T::key_t to T* for use in consolidating instances of T.
563 Owns all instances of T.
564 T::key_t should have operator== and be hashable. */
565
566template <typename T>
568{
569public:
570 typedef typename T::key_t key_t;
571 typedef T instance_t;
573 typedef typename inner_map_t::iterator iterator;
574
575 /* Delete all instances of T. */
576
578 {
579 for (typename inner_map_t::iterator iter = m_inner_map.begin ();
580 iter != m_inner_map.end (); ++iter)
581 delete (*iter).second;
582 }
583
584 /* Get the instance of T for K if one exists, or nullptr. */
585
586 T *get (const key_t &k) const
587 {
588 if (instance_t **slot = const_cast<inner_map_t &> (m_inner_map).get (k))
589 return *slot;
590 return nullptr;
591 }
592
593 /* Take ownership of INSTANCE. */
594
595 void put (const key_t &k, T *instance)
596 {
597 m_inner_map.put (k, instance);
598 }
599
600 size_t elements () const { return m_inner_map.elements (); }
601
602 iterator begin () const { return m_inner_map.begin (); }
603 iterator end () const { return m_inner_map.end (); }
604
605private:
607};
608
609/* Disable -Wformat-diag; we want to be able to use pp_printf
610 for logging/dumping without complying with the rules for diagnostics. */
611#if __GNUC__ >= 10
612#pragma GCC diagnostic ignored "-Wformat-diag"
613#endif
614
615#if !ENABLE_ANALYZER
616extern void sorry_no_analyzer ();
617#endif /* #if !ENABLE_ANALYZER */
618
619#endif /* GCC_ANALYZER_COMMON_H */
Definition analysis-plan.h:35
Definition region.h:1316
Definition constraint-manager.h:178
Definition common.h:323
virtual enum built_in_function builtin_code() const =0
const builtin_known_function * dyn_cast_builtin_kf() const final override
Definition common.h:332
tree builtin_decl() const
Definition common.h:326
Definition call-details.h:31
Definition call-summary.h:68
Definition call-summary.h:34
Definition region.h:1168
Definition checker-event.h:98
Definition checker-path.h:32
Definition svalue.h:1500
Definition constraint-manager.h:410
Definition common.h:392
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 void add_events_to_path(checker_path *emission_path, const exploded_edge &eedge, pending_diagnostic &pd) 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:394
Definition region.h:742
Definition region.h:879
Definition region-model.h:1334
Definition constraint-manager.h:240
Definition exploded-graph.h:335
Definition exploded-graph.h:783
Definition exploded-graph.h:206
Definition exploded-graph.h:932
Definition program-state.h:34
Definition exploded-graph.h:960
Definition exploded-graph.h:980
Definition feasible-graph.h:84
Definition region.h:802
Definition region.h:319
Definition region.h:481
Definition exploded-graph.h:40
Definition common.h:338
bool matches_call_types_p(const call_details &) const final override
Definition common.h:340
Definition known-function-manager.h:41
Definition common.h:294
virtual void impl_call_post(const call_details &) const
Definition common.h:311
virtual void impl_call_pre(const call_details &) const
Definition common.h:307
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:317
virtual ~known_function()
Definition common.h:296
virtual void check_any_preconditions(const call_details &) const
Definition common.h:302
Definition region.h:520
Definition analyzer-logging.h:34
Definition region.h:973
Definition common.h:435
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:437
bool operator==(const path_var &other) const
Definition common.h:178
int m_stack_depth
Definition common.h:192
path_var(tree t, int stack_depth)
Definition common.h:172
void dump(pretty_printer *pp) const
tree m_tree
Definition common.h:191
Definition pending-diagnostic.h:189
Definition pending-diagnostic.h:435
Definition common.h:368
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: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:768
Definition region-model-manager.h:32
Definition region-model.h:299
Definition common.h:208
bit_offset_t get_bit_offset() const
Definition common.h:233
bool symbolic_p() const
Definition common.h:231
const region * get_base_region() const
Definition common.h:228
bit_offset_t m_offset
Definition common.h:276
static region_offset make_byte_offset(const region *base_region, const svalue *num_bytes_sval)
const svalue * m_sym_offset
Definition common.h:277
static region_offset make_concrete(const region *base_region, bit_offset_t offset)
Definition common.h:215
void dump_to_pp(pretty_printer *pp, bool) const
region_offset()
Definition common.h:210
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:270
void dump(bool) const
bool operator==(const region_offset &other) const
Definition common.h:259
const svalue & calc_symbolic_bit_offset(region_model_manager *mgr) const
const region * m_base_region
Definition common.h:275
bool get_concrete_byte_offset(byte_offset_t *out) const
Definition common.h:239
static region_offset make_symbolic(const region *base_region, const svalue *sym_offset)
Definition common.h:220
const svalue * get_symbolic_byte_offset() const
Definition common.h:250
bool concrete_p() const
Definition common.h:230
Definition region.h:126
Definition region-model.h:1274
Definition exploded-graph.h:447
Definition diagnostic-manager.h:79
Definition region.h:1067
Definition program-state.h:92
Definition checker-event.h:382
Definition sm.h:43
Definition state-purge.h:31
Definition state-purge.h:152
Definition state-purge.h:119
Definition store.h:938
Definition store.h:819
Definition region.h:1276
Definition svalue.h:92
Definition region.h:663
Definition store.h:161
Definition region.h:1406
Definition region-model.h:223
Definition checker-event.h:877
~auto_cfun()
Definition common.h:523
auto_cfun(function *fun)
Definition common.h:522
Definition common.h:568
inner_map_t::iterator iterator
Definition common.h:573
inner_map_t m_inner_map
Definition common.h:606
T * get(const key_t &k) const
Definition common.h:586
T::key_t key_t
Definition common.h:570
~consolidation_map()
Definition common.h:577
iterator begin() const
Definition common.h:602
T instance_t
Definition common.h:571
hash_map< key_t, instance_t * > inner_map_t
Definition common.h:572
void put(const key_t &k, T *instance)
Definition common.h:595
size_t elements() const
Definition common.h:600
iterator end() const
Definition common.h:603
Definition genmatch.cc:1506
Definition graphviz.h:385
Definition hash-map.h:40
Definition hash-set.h:37
Definition pretty-print.h:241
Definition lra-spills.cc:101
Definition tristate.h:26
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:4756
void pop_cfun(void)
Definition function.cc:4782
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
#define UNKNOWN_LOCATION
Definition input.h:32
location_t get_pure_location(location_t loc)
Definition input.h:140
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:198
@ stmt
Definition checker-event.h:38
@ state_change
Definition checker-event.h:41
bool operator>(const region_offset &, const region_offset &)
offset_int bit_offset_t
Definition common.h:195
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:379
@ read
Definition common.h:380
@ write
Definition common.h:381
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:197
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:196
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:73
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)
bool useful_location_p(location_t loc)
Definition common.h:160
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
Definition event-loc-info.h:29
Definition pending-diagnostic.h:37
Definition region-model.h:1224
Definition diagnostic-manager.h:35
Definition exploded-graph.h:658
Definition tree-loop-distribution.cc:240
Definition function.h:249
Definition gimple.h:907
Definition gimple.h:352
Definition gimple.h:221
Definition common.h:547
static void mark_empty(Type &t)
Definition common.h:557
static hashval_t hash(value_type v)
Definition common.h:550
Type compare_type
Definition common.h:549
Type value_type
Definition common.h:548
static bool equal(const value_type &existing, const value_type &candidate)
Definition common.h:551
static void mark_deleted(Type &t)
Definition common.h:556
static bool is_empty(Type t)
Definition common.h:559
static bool is_deleted(Type t)
Definition common.h:558
Definition common.h:530
static void mark_deleted(Type &)
Type compare_type
Definition common.h:532
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:531
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:104
#define NULL_TREE
Definition tree.h:318