GCC Middle and Back End API Reference
checker-event.h
Go to the documentation of this file.
1/* Subclasses of diagnostic_event for analyzer diagnostics.
2 Copyright (C) 2019-2025 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_CHECKER_EVENT_H
22#define GCC_ANALYZER_CHECKER_EVENT_H
23
27#include "diagnostic-digraphs.h"
28
29namespace ana {
30
31/* An enum for discriminating between the concrete subclasses of
32 checker_event. */
33
57
58extern const char *event_kind_to_string (enum event_kind ek);
59
60/* Event subclasses.
61
62 The class hierarchy looks like this (using indentation to show
63 inheritance, and with event_kinds shown for the concrete subclasses):
64
65 diagnostic_event
66 checker_event
67 debug_event (event_kind::debug)
68 custom_event (event_kind::custom)
69 precanned_custom_event
70 statement_event (event_kind::stmt)
71 region_creation_event (event_kind::region_creation)
72 function_entry_event (event_kind::function_entry)
73 state_change_event (event_kind::state_change)
74 superedge_event
75 cfg_edge_event
76 start_cfg_edge_event (event_kind::start_cfg_edge)
77 end_cfg_edge_event (event_kind::end_cfg_edge)
78 catch_cfg_edge_event (event_kind::catch_cfg_edge)
79 call_event (event_kind::call_edge)
80 return_edge (event_kind::return_edge)
81 start_consolidated_cfg_edges_event (event_kind::start_consolidated_cfg_edges)
82 end_consolidated_cfg_edges_event (event_kind::end_consolidated_cfg_edges)
83 inlined_call_event (event_kind::inlined_call)
84 setjmp_event (event_kind::setjmp_)
85 rewind_event
86 rewind_from_longjmp_event (event_kind::rewind_from_longjmp)
87 rewind_to_setjmp_event (event_kind::rewind_to_setjmp)
88 throw_event (event_kind:throw_)
89 explicit_throw_event
90 throw_from_call_to_external_fn_event
91 unwind_event (event_kind::unwind)
92 warning_event (event_kind::warning). */
93
94/* Abstract subclass of diagnostic_event; the base class for use in
95 checker_path (the analyzer's diagnostic_path subclass). */
96
98{
99public:
100 /* Implementation of diagnostic_event. */
101
102 location_t get_location () const final override { return m_loc; }
103 int get_stack_depth () const final override { return m_effective_depth; }
105 {
106 return m_logical_loc;
107 }
108 meaning get_meaning () const override;
109 bool connect_to_next_event_p () const override { return false; }
111 {
112 return 0;
113 }
114
115 void
117 sarif_object &thread_flow_loc_obj) const override;
118
119 /* Additional functionality. */
120 enum event_kind get_kind () const { return m_kind; }
121 tree get_fndecl () const { return m_effective_fndecl; }
122
124
127 diagnostic_event_id_t emission_id);
128 virtual bool is_call_p () const { return false; }
129 virtual bool is_function_entry_p () const { return false; }
130 virtual bool is_return_p () const { return false; }
131
132 std::unique_ptr<diagnostics::digraphs::digraph>
133 maybe_make_diagnostic_state_graph (bool debug) const final override;
134
135 virtual const program_state *
136 get_program_state () const { return nullptr; }
137
138 /* For use with %@. */
140 {
141 return &m_emission_id;
142 }
143
144 void dump (pretty_printer *pp) const;
145 void debug () const;
146
147 void set_location (location_t loc) { m_loc = loc; }
148
149protected:
151 const event_loc_info &loc_info);
152
153 private:
155 const enum event_kind m_kind;
156 protected:
157 location_t m_loc;
163 diagnostic_event_id_t m_emission_id; // only set once all pruning has occurred
165};
166
167/* A concrete event subclass for a purely textual event, for use in
168 debugging path creation and filtering. */
169
171{
172public:
173
174 debug_event (const event_loc_info &loc_info,
175 const char *desc)
176 : checker_event (event_kind::debug, loc_info),
177 m_desc (xstrdup (desc))
178 {
179 }
181 {
182 free (m_desc);
183 }
184
185 void print_desc (pretty_printer &) const final override;
186
187private:
188 char *m_desc;
189};
190
191/* An abstract event subclass for custom events. These are not filtered,
192 as they are likely to be pertinent to the diagnostic. */
193
195{
196protected:
197 custom_event (const event_loc_info &loc_info)
198 : checker_event (event_kind::custom, loc_info)
199 {
200 }
201};
202
203/* A concrete custom_event subclass with a precanned message. */
204
206{
207public:
209 const char *desc)
210 : custom_event (loc_info),
211 m_desc (xstrdup (desc))
212 {
213 }
215 {
216 free (m_desc);
217 }
218
219 void print_desc (pretty_printer &) const final override;
220
221private:
222 char *m_desc;
223};
224
225/* A concrete event subclass describing the execution of a gimple statement,
226 for use at high verbosity levels when debugging paths. */
227
229{
230public:
231 statement_event (const gimple *stmt, tree fndecl, int depth,
232 const program_state &dst_state);
233
234 void print_desc (pretty_printer &) const final override;
235
236 const program_state *
237 get_program_state () const final override
238 {
239 return &m_dst_state;
240 }
241
242 const gimple * const m_stmt;
244};
245
246/* An abstract event subclass describing the creation of a region that
247 is significant for a diagnostic.
248
249 There are too many combinations to express region creation in one message,
250 so we emit multiple region_creation_event instances when each pertinent
251 region is created.
252
253 The events are created by pending_diagnostic's add_region_creation_events
254 vfunc, which by default creates a region_creation_event_memory_space, and
255 if a capacity is known, a region_creation_event_capacity, giving e.g.:
256 (1) region created on stack here
257 (2) capacity: 100 bytes
258 but this vfunc can be overridden to create other events if other wordings
259 are more appropriate foa a given pending_diagnostic. */
260
262{
263protected:
265};
266
267/* Concrete subclass of region_creation_event.
268 Generates a message based on the memory space of the region
269 e.g. "region created on stack here". */
270
272{
273public:
275 const event_loc_info &loc_info)
276 : region_creation_event (loc_info),
277 m_mem_space (mem_space)
278 {
279 }
280
281 void print_desc (pretty_printer &pp) const final override;
282
283private:
285};
286
287/* Concrete subclass of region_creation_event.
288 Generates a message based on the capacity of the region
289 e.g. "capacity: 100 bytes". */
290
292{
293public:
295 const event_loc_info &loc_info)
296 : region_creation_event (loc_info),
297 m_capacity (capacity)
298 {
300 }
301
302 void print_desc (pretty_printer &pp) const final override;
303
304private:
306};
307
308/* Concrete subclass of region_creation_event.
309 Generates a message based on the capacity of the region
310 e.g. "allocated 100 bytes here". */
311
313{
314public:
316 const event_loc_info &loc_info)
317 : region_creation_event (loc_info),
318 m_capacity (capacity)
319 {}
320
321 void print_desc (pretty_printer &pp) const final override;
322
323private:
325};
326
327/* Concrete subclass of region_creation_event.
328 Generates a debug message intended for analyzer developers. */
329
331{
332public:
334 const event_loc_info &loc_info)
335 : region_creation_event (loc_info),
336 m_reg (reg), m_capacity (capacity)
337 {
338 }
339
340 void print_desc (pretty_printer &pp) const final override;
341
342private:
343 const region *m_reg;
345};
346
347/* An event subclass describing the entry to a function. */
348
350{
351public:
353 const program_state &state)
355 m_state (state)
356 {
357 }
358
360 const program_state &state);
361
362 void print_desc (pretty_printer &pp) const override;
363 meaning get_meaning () const override;
364
365 bool is_function_entry_p () const final override { return true; }
366
367 const program_state *
368 get_program_state () const final override
369 {
370 return &m_state;
371 }
372
373private:
375};
376
377/* Subclass of checker_event describing a state change. */
378
380{
381public:
383 int stack_depth,
384 const state_machine &sm,
385 const svalue *sval,
388 const svalue *origin,
389 const program_state &dst_state,
390 const exploded_node *enode);
391
392 void print_desc (pretty_printer &pp) const final override;
393 meaning get_meaning () const override;
394
395 const program_state *
396 get_program_state () const final override
397 {
398 return &m_dst_state;
399 }
400
402 {
403 return m_dst_state.get_current_function ();
404 }
405
406 const exploded_node *get_exploded_node () const { return m_enode; }
407
417};
418
419/* Subclass of checker_event; parent class for subclasses that relate to
420 a superedge. */
421
423{
424public:
426 sarif_object &thread_flow_loc_obj)
427 const override;
428
429 /* Mark this edge event as being either an interprocedural call or
430 return in which VAR is in STATE, and that this is critical to the
431 diagnostic (so that print_desc can attempt to get a better description
432 from any pending_diagnostic). */
438
440
441 bool should_filter_p (int verbosity) const;
442
443 const program_state *
444 get_program_state () const override;
445
446 protected:
447 superedge_event (enum event_kind kind, const exploded_edge &eedge,
448 const event_loc_info &loc_info);
449
450 public:
455};
456
457/* An abstract event subclass for when a CFG edge is followed; it has two
458 subclasses, representing the start of the edge and the end of the
459 edge, which come in pairs. */
460
462{
463public:
464 meaning get_meaning () const override;
465
467
468 protected:
469 cfg_edge_event (enum event_kind kind, const exploded_edge &eedge,
470 const event_loc_info &loc_info);
471};
472
473/* A concrete event subclass for the start of a CFG edge
474 e.g. "following 'false' branch...'. */
475
477{
478public:
480 const event_loc_info &loc_info)
481 : cfg_edge_event (event_kind::start_cfg_edge, eedge, loc_info)
482 {
483 }
484
485 void print_desc (pretty_printer &pp) const override;
486 bool connect_to_next_event_p () const final override { return true; }
487
488protected:
489 label_text maybe_describe_condition (bool can_colorize) const;
490
491private:
492 static label_text maybe_describe_condition (bool can_colorize,
493 tree lhs,
494 enum tree_code op,
495 tree rhs);
497};
498
499/* A concrete event subclass for the end of a CFG edge
500 e.g. "...to here'. */
501
503{
504public:
506 const event_loc_info &loc_info)
507 : cfg_edge_event (event_kind::end_cfg_edge, eedge, loc_info)
508 {
509 }
510
511 void print_desc (pretty_printer &pp) const final override
512 {
513 pp_string (&pp, "...to here");
514 }
515};
516
517/* A concrete event subclass for catching an exception
518 e.g. "...catching 'struct io_error' here". */
519
521{
522public:
524 const event_loc_info &loc_info,
525 tree type)
526 : cfg_edge_event (event_kind::catch_, eedge, loc_info),
527 m_type (type)
528 {
529 }
530
531 void print_desc (pretty_printer &pp) const final override
532 {
533 if (m_type)
534 pp_printf (&pp, "...catching exception of type %qT here", m_type);
535 else
536 pp_string (&pp, "...catching exception here");
537 }
538
539private:
541};
542
543/* A concrete event subclass for an interprocedural call. */
544
546{
547public:
549 const event_loc_info &loc_info);
550
551 void print_desc (pretty_printer &pp) const override;
552 meaning get_meaning () const override;
553
554 bool is_call_p () const final override;
555
556 const program_state *
557 get_program_state () const final override;
558
559protected:
562
565};
566
567/* A concrete event subclass for an interprocedural return. */
568
570{
571public:
573 const event_loc_info &loc_info);
574
575 void print_desc (pretty_printer &pp) const final override;
576 meaning get_meaning () const override;
577
578 bool is_return_p () const final override;
579
582};
583
584/* A concrete event subclass for the start of a consolidated run of CFG
585 edges all either TRUE or FALSE e.g. "following 'false' branch...'. */
586
588{
589public:
591 bool edge_sense)
593 m_edge_sense (edge_sense)
594 {
595 }
596
597 void print_desc (pretty_printer &pp) const final override;
598 meaning get_meaning () const override;
599 bool connect_to_next_event_p () const final override { return true; }
600
601 private:
603};
604
605/* A concrete event subclass for the end of a consolidated run of
606 CFG edges e.g. "...to here'. */
607
609{
610public:
615
616 void print_desc (pretty_printer &pp) const final override
617 {
618 pp_string (&pp, "...to here");
619 }
620};
621
622/* A concrete event subclass for describing an inlined call event
623 e.g. "inlined call to 'callee' from 'caller'". */
624
626{
627public:
628 inlined_call_event (location_t loc,
629 tree apparent_callee_fndecl,
630 tree apparent_caller_fndecl,
631 int actual_depth,
632 int stack_depth_adjustment)
634 event_loc_info (loc,
635 apparent_caller_fndecl,
636 actual_depth + stack_depth_adjustment)),
637 m_apparent_callee_fndecl (apparent_callee_fndecl),
638 m_apparent_caller_fndecl (apparent_caller_fndecl)
639 {
640 gcc_assert (LOCATION_BLOCK (loc) == NULL);
641 }
642
643 void print_desc (pretty_printer &) const final override;
644 meaning get_meaning () const override;
645
646private:
649};
650
651/* A concrete event subclass for a setjmp or sigsetjmp call. */
652
654{
655public:
656 setjmp_event (const event_loc_info &loc_info,
657 const exploded_node *enode,
658 const gcall &setjmp_call)
659 : checker_event (event_kind::setjmp_, loc_info),
660 m_enode (enode), m_setjmp_call (setjmp_call)
661 {
662 }
663
664 void print_desc (pretty_printer &pp) const final override;
665
668 diagnostic_event_id_t emission_id) final override;
669
670private:
673};
674
675/* An abstract event subclass for rewinding from a longjmp to a setjmp
676 (or siglongjmp to sigsetjmp).
677
678 Base class for two from/to subclasses, showing the two halves of the
679 rewind. */
680
682{
683public:
686 const exploded_edge *get_eedge () const { return m_eedge; }
687
688 protected:
690 enum event_kind kind,
691 const event_loc_info &loc_info,
692 const rewind_info_t *rewind_info);
694
695 private:
697};
698
699/* A concrete event subclass for rewinding from a longjmp to a setjmp,
700 showing the longjmp (or siglongjmp). */
701
703{
704public:
706 const event_loc_info &loc_info,
707 const rewind_info_t *rewind_info)
708 : rewind_event (eedge, event_kind::rewind_from_longjmp, loc_info,
709 rewind_info)
710 {
711 }
712
713 void print_desc (pretty_printer &pp) const final override;
714};
715
716/* A concrete event subclass for rewinding from a longjmp to a setjmp,
717 showing the setjmp (or sigsetjmp). */
718
720{
721public:
723 const event_loc_info &loc_info,
724 const rewind_info_t *rewind_info)
725 : rewind_event (eedge, event_kind::rewind_to_setjmp, loc_info,
726 rewind_info)
727 {
728 }
729
730 void print_desc (pretty_printer &pp) const final override;
731
734 diagnostic_event_id_t emission_id) final override;
735
736private:
738};
739
740/* An abstract subclass for throwing/rethrowing an exception. */
741
743{
744public:
745 throw_event (const event_loc_info &loc_info,
746 const exploded_node *enode,
747 const gcall &throw_call)
748 : checker_event (event_kind::throw_, loc_info),
749 m_enode (enode),
750 m_throw_call (throw_call)
751 {
752 }
753
754protected:
757};
758
759/* A concrete event subclass for an explicit "throw EXC;"
760 or "throw;" (actually, a call to __cxa_throw or __cxa_rethrow). */
761
763{
764public:
766 const exploded_node *enode,
767 const gcall &throw_call,
768 tree type,
769 bool is_rethrow)
770 : throw_event (loc_info, enode, throw_call),
771 m_type (type),
772 m_is_rethrow (is_rethrow)
773 {
774 }
775
776 void print_desc (pretty_printer &pp) const final override;
777
778private:
781};
782
783/* A concrete event subclass for an exception being thrown
784 from within a call to a function we don't have the body of,
785 or where we don't know what function was called. */
786
788{
789public:
791 const exploded_node *enode,
792 const gcall &throw_call,
793 tree fndecl)
794 : throw_event (loc_info, enode, throw_call),
795 m_fndecl (fndecl)
796 {
797 }
798
799 void print_desc (pretty_printer &pp) const final override;
800
801private:
803};
804
805/* A concrete event subclass for unwinding a stack frame when
806 processing an exception. */
807
809{
810public:
811 unwind_event (const event_loc_info &loc_info)
812 : checker_event (event_kind::unwind, loc_info),
813 m_num_frames (1)
814 {
815 }
816
817 void print_desc (pretty_printer &pp) const final override;
818
820};
821
822/* Concrete subclass of checker_event for use at the end of a path:
823 a repeat of the warning message at the end of the path (perhaps with
824 references to pertinent events that occurred on the way), at the point
825 where the problem occurs. */
826
828{
829public:
831 const exploded_node *enode,
832 const state_machine *sm,
834 const program_state *program_state_ = nullptr)
835 : checker_event (event_kind::warning, loc_info),
836 m_enode (enode),
837 m_sm (sm), m_var (var), m_state (state)
838 {
839 if (program_state_)
840 m_program_state = std::make_unique<program_state> (*program_state_);
841 }
842
843 void print_desc (pretty_printer &pp) const final override;
844 meaning get_meaning () const override;
845
846 const program_state *
847 get_program_state () const final override;
848
849 const exploded_node *get_exploded_node () const { return m_enode; }
850
851private:
856 /* Optional copy of program state, for when this is different from
857 m_enode's state: */
858 std::unique_ptr<program_state> m_program_state;
859};
860
861} // namespace ana
862
863#endif /* GCC_ANALYZER_CHECKER_EVENT_H */
void print_desc(pretty_printer &pp) const override
const program_state * get_program_state() const final override
meaning get_meaning() const override
call_event(const exploded_edge &eedge, const event_loc_info &loc_info)
bool is_call_p() const final override
tree get_callee_fndecl() const
const supernode * m_dest_snode
Definition checker-event.h:564
tree get_caller_fndecl() const
const supernode * m_src_snode
Definition checker-event.h:563
Definition supergraph.h:400
tree m_type
Definition checker-event.h:540
catch_cfg_edge_event(const exploded_edge &eedge, const event_loc_info &loc_info, tree type)
Definition checker-event.h:523
void print_desc(pretty_printer &pp) const final override
Definition checker-event.h:531
meaning get_meaning() const override
cfg_edge_event(enum event_kind kind, const exploded_edge &eedge, const event_loc_info &loc_info)
const cfg_superedge & get_cfg_superedge() const
Definition supergraph.h:522
virtual void prepare_for_emission(checker_path *, pending_diagnostic *pd, diagnostic_event_id_t emission_id)
virtual const program_state * get_program_state() const
Definition checker-event.h:136
checker_event(enum event_kind kind, const event_loc_info &loc_info)
void debug() const
virtual bool is_return_p() const
Definition checker-event.h:130
tree m_effective_fndecl
Definition checker-event.h:159
diagnostic_event_id_t m_emission_id
Definition checker-event.h:163
enum event_kind get_kind() const
Definition checker-event.h:120
int get_stack_depth() const final override
Definition checker-event.h:103
location_t m_loc
Definition checker-event.h:157
const diagnostic_event_id_t * get_id_ptr() const
Definition checker-event.h:139
enum event_kind m_kind
Definition checker-event.h:155
tree m_original_fndecl
Definition checker-event.h:158
virtual bool is_function_entry_p() const
Definition checker-event.h:129
logical_location m_logical_loc
Definition checker-event.h:164
void set_location(location_t loc)
Definition checker-event.h:147
pending_diagnostic * m_pending_diagnostic
Definition checker-event.h:162
bool connect_to_next_event_p() const override
Definition checker-event.h:109
int get_original_stack_depth() const
Definition checker-event.h:123
location_t get_location() const final override
Definition checker-event.h:102
virtual bool is_call_p() const
Definition checker-event.h:128
std::unique_ptr< diagnostics::digraphs::digraph > maybe_make_diagnostic_state_graph(bool debug) const final override
tree get_fndecl() const
Definition checker-event.h:121
void maybe_add_sarif_properties(sarif_builder &, sarif_object &thread_flow_loc_obj) const override
const checker_path * m_path
Definition checker-event.h:154
int m_effective_depth
Definition checker-event.h:161
int m_original_depth
Definition checker-event.h:160
diagnostic_thread_id_t get_thread_id() const final override
Definition checker-event.h:110
meaning get_meaning() const override
logical_location get_logical_location() const final override
Definition checker-event.h:104
void dump(pretty_printer *pp) const
Definition checker-path.h:32
custom_event(const event_loc_info &loc_info)
Definition checker-event.h:197
char * m_desc
Definition checker-event.h:188
~debug_event()
Definition checker-event.h:180
debug_event(const event_loc_info &loc_info, const char *desc)
Definition checker-event.h:174
void print_desc(pretty_printer &) const final override
end_cfg_edge_event(const exploded_edge &eedge, const event_loc_info &loc_info)
Definition checker-event.h:505
void print_desc(pretty_printer &pp) const final override
Definition checker-event.h:511
end_consolidated_cfg_edges_event(const event_loc_info &loc_info)
Definition checker-event.h:611
void print_desc(pretty_printer &pp) const final override
Definition checker-event.h:616
tree m_type
Definition checker-event.h:779
void print_desc(pretty_printer &pp) const final override
bool m_is_rethrow
Definition checker-event.h:780
explicit_throw_event(const event_loc_info &loc_info, const exploded_node *enode, const gcall &throw_call, tree type, bool is_rethrow)
Definition checker-event.h:765
Definition exploded-graph.h:396
Definition exploded-graph.h:205
function_entry_event(const program_point &dst_point, const program_state &state)
const program_state * get_program_state() const final override
Definition checker-event.h:368
meaning get_meaning() const override
function_entry_event(const event_loc_info &loc_info, const program_state &state)
Definition checker-event.h:352
bool is_function_entry_p() const final override
Definition checker-event.h:365
void print_desc(pretty_printer &pp) const override
const program_state & m_state
Definition checker-event.h:374
meaning get_meaning() const override
void print_desc(pretty_printer &) const final override
inlined_call_event(location_t loc, tree apparent_callee_fndecl, tree apparent_caller_fndecl, int actual_depth, int stack_depth_adjustment)
Definition checker-event.h:628
tree m_apparent_callee_fndecl
Definition checker-event.h:647
tree m_apparent_caller_fndecl
Definition checker-event.h:648
Definition pending-diagnostic.h:190
~precanned_custom_event()
Definition checker-event.h:214
char * m_desc
Definition checker-event.h:222
void print_desc(pretty_printer &) const final override
precanned_custom_event(const event_loc_info &loc_info, const char *desc)
Definition checker-event.h:208
Definition program-point.h:175
Definition program-state.h:224
tree m_capacity
Definition checker-event.h:324
void print_desc(pretty_printer &pp) const final override
region_creation_event_allocation_size(tree capacity, const event_loc_info &loc_info)
Definition checker-event.h:315
void print_desc(pretty_printer &pp) const final override
region_creation_event_capacity(tree capacity, const event_loc_info &loc_info)
Definition checker-event.h:294
tree m_capacity
Definition checker-event.h:305
region_creation_event_debug(const region *reg, tree capacity, const event_loc_info &loc_info)
Definition checker-event.h:333
tree m_capacity
Definition checker-event.h:344
const region * m_reg
Definition checker-event.h:343
void print_desc(pretty_printer &pp) const final override
enum memory_space m_mem_space
Definition checker-event.h:284
void print_desc(pretty_printer &pp) const final override
region_creation_event_memory_space(enum memory_space mem_space, const event_loc_info &loc_info)
Definition checker-event.h:274
region_creation_event(const event_loc_info &loc_info)
Definition region.h:126
const supernode * m_dest_snode
Definition checker-event.h:581
return_event(const exploded_edge &eedge, const event_loc_info &loc_info)
void print_desc(pretty_printer &pp) const final override
bool is_return_p() const final override
const supernode * m_src_snode
Definition checker-event.h:580
meaning get_meaning() const override
tree get_longjmp_caller() const
rewind_event(const exploded_edge *eedge, enum event_kind kind, const event_loc_info &loc_info, const rewind_info_t *rewind_info)
tree get_setjmp_caller() const
const exploded_edge * m_eedge
Definition checker-event.h:696
const rewind_info_t * m_rewind_info
Definition checker-event.h:693
const exploded_edge * get_eedge() const
Definition checker-event.h:686
rewind_from_longjmp_event(const exploded_edge *eedge, const event_loc_info &loc_info, const rewind_info_t *rewind_info)
Definition checker-event.h:705
void print_desc(pretty_printer &pp) const final override
Definition exploded-graph.h:472
void prepare_for_emission(checker_path *path, pending_diagnostic *pd, diagnostic_event_id_t emission_id) final override
rewind_to_setjmp_event(const exploded_edge *eedge, const event_loc_info &loc_info, const rewind_info_t *rewind_info)
Definition checker-event.h:722
void print_desc(pretty_printer &pp) const final override
diagnostic_event_id_t m_original_setjmp_event_id
Definition checker-event.h:737
const gcall & m_setjmp_call
Definition checker-event.h:672
void print_desc(pretty_printer &pp) const final override
void prepare_for_emission(checker_path *path, pending_diagnostic *pd, diagnostic_event_id_t emission_id) final override
const exploded_node * m_enode
Definition checker-event.h:671
setjmp_event(const event_loc_info &loc_info, const exploded_node *enode, const gcall &setjmp_call)
Definition checker-event.h:656
bool connect_to_next_event_p() const final override
Definition checker-event.h:486
void print_desc(pretty_printer &pp) const override
static label_text maybe_describe_condition(bool can_colorize, tree lhs, enum tree_code op, tree rhs)
start_cfg_edge_event(const exploded_edge &eedge, const event_loc_info &loc_info)
Definition checker-event.h:479
label_text maybe_describe_condition(bool can_colorize) const
static bool should_print_expr_p(tree)
bool connect_to_next_event_p() const final override
Definition checker-event.h:599
meaning get_meaning() const override
start_consolidated_cfg_edges_event(const event_loc_info &loc_info, bool edge_sense)
Definition checker-event.h:590
bool m_edge_sense
Definition checker-event.h:602
void print_desc(pretty_printer &pp) const final override
state_machine::state_t m_to
Definition checker-event.h:413
state_machine::state_t m_from
Definition checker-event.h:412
void print_desc(pretty_printer &pp) const final override
const svalue * m_origin
Definition checker-event.h:414
state_change_event(const supernode *node, const gimple *stmt, int stack_depth, const state_machine &sm, const svalue *sval, state_machine::state_t from, state_machine::state_t to, const svalue *origin, const program_state &dst_state, const exploded_node *enode)
const exploded_node * get_exploded_node() const
Definition checker-event.h:406
meaning get_meaning() const override
const supernode * m_node
Definition checker-event.h:408
program_state m_dst_state
Definition checker-event.h:415
const state_machine & m_sm
Definition checker-event.h:410
const svalue * m_sval
Definition checker-event.h:411
const program_state * get_program_state() const final override
Definition checker-event.h:396
const exploded_node * m_enode
Definition checker-event.h:416
const gimple * m_stmt
Definition checker-event.h:409
const function * get_dest_function() const
Definition checker-event.h:401
Definition sm.h:41
const state_machine::state * state_t
Definition sm.h:61
statement_event(const gimple *stmt, tree fndecl, int depth, const program_state &dst_state)
void print_desc(pretty_printer &) const final override
const program_state * get_program_state() const final override
Definition checker-event.h:237
const gimple *const m_stmt
Definition checker-event.h:242
const program_state m_dst_state
Definition checker-event.h:243
const program_state * get_program_state() const override
state_machine::state_t m_critical_state
Definition checker-event.h:454
superedge_event(enum event_kind kind, const exploded_edge &eedge, const event_loc_info &loc_info)
const callgraph_superedge & get_callgraph_superedge() const
void maybe_add_sarif_properties(sarif_builder &, sarif_object &thread_flow_loc_obj) const override
tree m_var
Definition checker-event.h:453
const exploded_edge & m_eedge
Definition checker-event.h:451
bool should_filter_p(int verbosity) const
void record_critical_state(tree var, state_machine::state_t state)
Definition checker-event.h:433
const superedge * m_sedge
Definition checker-event.h:452
Definition supergraph.h:318
Definition supergraph.h:239
Definition svalue.h:92
const gcall & m_throw_call
Definition checker-event.h:756
throw_event(const event_loc_info &loc_info, const exploded_node *enode, const gcall &throw_call)
Definition checker-event.h:745
const exploded_node * m_enode
Definition checker-event.h:755
void print_desc(pretty_printer &pp) const final override
throw_from_call_to_external_fn_event(const event_loc_info &loc_info, const exploded_node *enode, const gcall &throw_call, tree fndecl)
Definition checker-event.h:790
tree m_fndecl
Definition checker-event.h:802
unwind_event(const event_loc_info &loc_info)
Definition checker-event.h:811
void print_desc(pretty_printer &pp) const final override
int m_num_frames
Definition checker-event.h:819
const program_state * get_program_state() const final override
std::unique_ptr< program_state > m_program_state
Definition checker-event.h:858
tree m_var
Definition checker-event.h:854
const exploded_node * get_exploded_node() const
Definition checker-event.h:849
const state_machine * m_sm
Definition checker-event.h:853
meaning get_meaning() const override
const exploded_node * m_enode
Definition checker-event.h:852
void print_desc(pretty_printer &pp) const final override
state_machine::state_t m_state
Definition checker-event.h:855
warning_event(const event_loc_info &loc_info, const exploded_node *enode, const state_machine *sm, tree var, state_machine::state_t state, const program_state *program_state_=nullptr)
Definition checker-event.h:830
Definition diagnostic-event-id.h:37
Definition diagnostic-path.h:80
@ function
Definition diagnostic-path.h:104
Definition pretty-print.h:241
Definition diagnostic-format-sarif.cc:750
Definition diagnostic-format-sarif.h:146
static struct path_prefix cpath path
Definition collect2.cc:514
union tree_node * tree
Definition coretypes.h:97
int diagnostic_thread_id_t
Definition diagnostic-event-id.h:70
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2008
free(str)
tree_code
Definition genmatch.cc:1002
#define LOCATION_BLOCK(LOC)
Definition input.h:196
logical_location_manager::key logical_location
Definition logical-location.h:173
Definition access-diagram.h:30
event_kind
Definition checker-event.h:35
@ function_entry
Definition checker-event.h:40
@ throw_
Definition checker-event.h:53
@ unwind
Definition checker-event.h:54
@ stmt
Definition checker-event.h:38
@ setjmp_
Definition checker-event.h:50
@ rewind_to_setjmp
Definition checker-event.h:52
@ start_consolidated_cfg_edges
Definition checker-event.h:47
@ start_cfg_edge
Definition checker-event.h:42
@ region_creation
Definition checker-event.h:39
@ inlined_call
Definition checker-event.h:49
@ warning
Definition checker-event.h:55
@ state_change
Definition checker-event.h:41
@ rewind_from_longjmp
Definition checker-event.h:51
@ catch_
Definition checker-event.h:44
@ custom
Definition checker-event.h:37
@ return_edge
Definition checker-event.h:46
@ end_cfg_edge
Definition checker-event.h:43
@ debug
Definition checker-event.h:36
@ call_edge
Definition checker-event.h:45
@ end_consolidated_cfg_edges
Definition checker-event.h:48
const char * event_kind_to_string(enum event_kind ek)
memory_space
Definition region.h:32
void pp_printf(pretty_printer *pp, const char *msg,...)
Definition pretty-print.cc:2557
void pp_string(pretty_printer *pp, const char *str)
Definition pretty-print.cc:2638
Definition event-loc-info.h:29
Definition diagnostic-path.h:124
Definition gimple.h:352
Definition gimple.h:221
Definition genautomata.cc:669
Definition gengtype.h:252
#define NULL
Definition system.h:50
#define gcc_assert(EXPR)
Definition system.h:814