GCC Middle and Back End API Reference
libgdiagnostics++.h
Go to the documentation of this file.
1/* A C++ wrapper API around libgdiagnostics.h for emitting diagnostics.
2 Copyright (C) 2023-2025 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it
7under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 3, or (at your option)
9any later version.
10
11GCC is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
19
20#ifndef LIBGDIAGNOSTICSPP_H
21#define LIBGDIAGNOSTICSPP_H
22
23#include "libgdiagnostics.h"
24
25namespace libgdiagnostics {
26
29
30class file;
33class execution_path;
34class group;
35class manager;
36class diagnostic;
37class graph;
38class node;
39class edge;
40
41/* Wrapper around a borrowed diagnostic_text_sink *. */
42
72
73/* Wrapper around a diagnostic_file *. */
74
75class file
76{
77public:
78 file () : m_inner (nullptr) {}
80 file (const file &other) : m_inner (other.m_inner) {}
81 file &operator= (const file &other) { m_inner = other.m_inner; return *this; }
82
83 void set_buffered_content (const char *data, size_t sz);
84
86};
87
88/* Wrapper around a const diagnostic_physical_location *. */
89
91{
92public:
93 physical_location () : m_inner (nullptr) {}
94
96 : m_inner (location)
97 {}
98
99 file get_file () const;
100
102};
103
104/* Wrapper around a const diagnostic_logical_location *. */
105
107{
108public:
109 logical_location () : m_inner (nullptr) {}
110
112 : m_inner (logical_loc)
113 {}
114
115 operator bool() { return m_inner != nullptr; }
116
117 // Various accessors
120 const char *get_short_name () const;
121 const char *get_fully_qualified_name () const;
122 const char *get_decorated_name () const;
123
124 bool operator== (const logical_location &other) const
125 {
126 return m_inner == other.m_inner;
127 }
128
129 bool operator!= (const logical_location &other) const
130 {
131 return m_inner != other.m_inner;
132 }
133
135};
136
137/* RAII class around a diagnostic_execution_path *. */
138
140{
141public:
142 execution_path () : m_inner (nullptr), m_owned (false) {}
143
147
152
153 execution_path (const execution_path &other) = delete;
154 execution_path &operator= (const execution_path &other) = delete;
155
157 : m_inner (other.m_inner),
158 m_owned (other.m_owned)
159 {
160 other.m_inner = nullptr;
161 other.m_owned = false;
162 }
163
165 {
166 m_inner = other.m_inner;
167 m_owned = other.m_owned;
168 other.m_inner = nullptr;
169 other.m_owned = false;
170 return *this;
171 }
172
178
180 add_event (physical_location physical_loc,
181 logical_location logical_loc,
182 unsigned stack_depth,
183 const char *fmt, ...)
185
187 add_event_va (physical_location physical_loc,
188 logical_location logical_loc,
189 unsigned stack_depth,
190 const char *fmt,
191 va_list *args)
193
196};
197
198/* RAII class for starting/ending a group within a diagnostic_manager. */
199
200class group
201{
202public:
203 group (manager &mgr);
204 ~group ();
205
206private:
208};
209
210/* Wrapper around a diagnostic *. */
211
213{
214public:
216
217 void
218 set_cwe (unsigned cwe_id);
219
220 void
221 add_rule (const char *title, const char *url);
222
223 void
224 set_location (physical_location loc);
225
226 void
227 add_location (physical_location loc);
228
229 void
230 add_location_with_label (physical_location loc,
231 const char *text);
232
233 void
234 set_logical_location (logical_location loc);
235
236 void
237 add_fix_it_hint_insert_before (physical_location loc,
238 const char *addition);
239 void
240 add_fix_it_hint_insert_after (physical_location loc,
241 const char *addition);
242 void
243 add_fix_it_hint_replace (physical_location loc,
244 const char *replacement);
245 void
246 add_fix_it_hint_delete (physical_location loc);
247
248 void
249 take_execution_path (execution_path path);
250
251 void
252 take_graph (graph g);
253
254 void
255 finish (const char *fmt, ...)
258
259 void
260 finish_va (const char *fmt, va_list *args)
263
265};
266
267/* Wrapper around a diagnostic_manager *, possibly with ownership. */
268
270{
271public:
274 m_owned (true)
275 {
276 }
277 manager (diagnostic_manager *inner, bool owned)
278 : m_inner (inner),
279 m_owned (owned)
280 {
281 }
283 {
284 if (m_owned)
286 }
287
288 manager (const manager &other) = delete;
289 manager (manager &&other)
290 : m_inner (other.m_inner),
291 m_owned (other.m_owned)
292 {
293 other.m_inner = nullptr;
294 }
295
296 void
301
302 void
307
308 void
313
314 void
319
321 add_text_sink (FILE *dst_stream,
322 enum diagnostic_colorize colorize)
323 {
324 return text_sink
325 (diagnostic_manager_add_text_sink (m_inner, dst_stream, colorize));
326 }
327
328 void
329 add_sarif_sink (FILE *dst_stream,
330 file main_input_file,
331 enum diagnostic_sarif_version version)
332 {
334 main_input_file.m_inner,
335 version);
336 }
337
338 bool
339 add_sink_from_spec (const char *option_name,
340 const char *spec,
341 manager control_mgr)
342 {
344 option_name,
345 spec,
346 control_mgr.m_inner);
347 }
348
349 void
350 write_patch (FILE *dst_stream)
351 {
353 }
354
355 /* Location management. */
356
357 file
358 new_file (const char *name,
359 const char *sarif_source_language)
362
363 void
365 FILE *out);
366
369
372 line_num_t line_num,
373 column_num_t column_num);
374
377 physical_location loc_start,
378 physical_location loc_end);
379
380 void
382 FILE *out);
383
386 logical_location parent,
387 const char *short_name,
388 const char *fully_qualified_name,
389 const char *decorated_name);
390
391 void
393 FILE *out);
394
397
400
401 void
403
404 void
406
409};
410
411class graph
412{
413public:
414 graph () : m_inner (nullptr), m_owned (false) {}
415
419
421 : m_inner (const_cast<diagnostic_graph *> (graph)),
422 m_owned (false)
423 {}
424
425 graph (const graph &other) = delete;
426 graph &operator= (const graph &other) = delete;
427
428 graph (graph &&other)
429 : m_inner (other.m_inner),
430 m_owned (other.m_owned)
431 {
432 other.m_inner = nullptr;
433 other.m_owned = false;
434 }
435
436 graph &operator= (graph &&other)
437 {
438 m_inner = other.m_inner;
439 m_owned = other.m_owned;
440 other.m_inner = nullptr;
441 other.m_owned = false;
442 return *this;
443 }
444
446 {
447 if (m_owned)
449 }
450
451 void
452 set_description (const char *);
453
454 node
455 get_node_by_id (const char *id) const;
456
457 edge
458 get_edge_by_id (const char *id) const;
459
460 edge
461 add_edge (const char *id, node src_node, node dst_node, const char *label);
462
465};
466
467// Borrowed pointer to a diagnostic_node.
468
469class node
470{
471public:
472 node () : m_inner (nullptr) {}
473 node (diagnostic_node *node_) : m_inner (node_) {}
474
475 void
476 set_label (const char *);
477
478 void
479 set_location (physical_location loc);
480
481 void
482 set_logical_location (logical_location loc);
483
485};
486
487// Borrowed edge to a diagnostic_edge.
488
489class edge
490{
491public:
492 edge (diagnostic_edge *edge_) : m_inner (edge_) {}
493
495};
496
497// Implementation
498
499// class file
500
501inline void
506
507// class physical_location
508
509inline file
514
515// class logical_location
516
518logical_location::get_kind () const
519{
520 // m_inner must be non-null
522}
523
524inline logical_location
525logical_location::get_parent () const
526{
527 if (m_inner)
529 else
530 return nullptr;
531}
532
533inline const char *
534logical_location::get_short_name () const
535{
536 if (m_inner)
538 else
539 return nullptr;
540}
541
542inline const char *
543logical_location::get_fully_qualified_name () const
544{
545 if (m_inner)
547 else
548 return nullptr;
549}
550
551inline const char *
552logical_location::get_decorated_name () const
553{
554 if (m_inner)
556 else
557 return nullptr;
558}
559
560// class execution_path
561
564 logical_location logical_loc,
565 unsigned stack_depth,
566 const char *fmt, ...)
567{
568 va_list args;
569 va_start (args, fmt);
570 diagnostic_event_id result = add_event_va (physical_loc,
571 logical_loc,
572 stack_depth,
573 fmt, &args);
574 va_end (args);
575
576 return result;
577}
578
581 logical_location logical_loc,
582 unsigned stack_depth,
583 const char *fmt,
584 va_list *args)
585{
587 physical_loc.m_inner,
588 logical_loc.m_inner,
589 stack_depth,
590 fmt,
591 args);
592}
593
594// class group
595
596inline
598: m_mgr (mgr)
599{
601}
602
603inline
608
609// class diagnostic
610
611inline void
612diagnostic::set_cwe (unsigned cwe_id)
613{
614 diagnostic_set_cwe (m_inner, cwe_id);
615}
616
617inline void
618diagnostic::add_rule (const char *title, const char *url)
619{
620 diagnostic_add_rule (m_inner, title, url);
621}
622
623inline void
628
629inline void
635
636inline void
641
642inline void
647
648inline void
649diagnostic::add_fix_it_hint_insert_before (physical_location loc,
650 const char *addition)
651{
653 loc.m_inner,
654 addition);
655}
656
657inline void
658diagnostic::add_fix_it_hint_insert_after (physical_location loc,
659 const char *addition)
660{
662 loc.m_inner,
663 addition);
664}
665
666inline void
667diagnostic::add_fix_it_hint_replace (physical_location loc,
668 const char *replacement)
669{
671 loc.m_inner,
673}
674
675inline void
676diagnostic::add_fix_it_hint_delete (physical_location loc)
677{
679 loc.m_inner);
680}
681
682inline void
689
690inline void
692{
694 g.m_inner);
695 g.m_owned = false;
696}
697
698inline void
699diagnostic::finish (const char *fmt, ...)
700{
701 va_list ap;
702 va_start (ap, fmt);
704 va_end (ap);
705}
706
707inline void
708diagnostic::finish_va (const char *fmt, va_list *args)
709{
710 diagnostic_finish_va (m_inner, fmt, args);
711}
712
713// class manager
714
715inline file
716manager::new_file (const char *name,
717 const char *sarif_source_language)
718{
719 return file
720 (diagnostic_manager_new_file (m_inner, name, sarif_source_language));
721}
722
732
735 line_num_t line_num,
736 column_num_t column_num)
737{
738 return physical_location
740 f.m_inner,
741 line_num,
742 column_num));
743}
744
747 physical_location loc_start,
748 physical_location loc_end)
749{
750 return physical_location
752 loc_caret.m_inner,
753 loc_start.m_inner,
754 loc_end.m_inner));
755}
756
757inline void
765inline logical_location
767 logical_location parent,
768 const char *short_name,
769 const char *fully_qualified_name,
770 const char *decorated_name)
771{
772 return logical_location
774 kind,
775 parent.m_inner,
776 short_name,
777 fully_qualified_name,
778 decorated_name));
779}
780
781inline void
789
790inline execution_path
795
796inline diagnostic
801
802inline void
807
808inline void
810{
812 g.m_inner);
813 g.m_owned = false;
814}
815
816// class graph
817
818inline void
819graph::set_description (const char *desc)
820{
822}
823
824inline node
825graph::get_node_by_id (const char *id) const
826{
828}
829
830inline edge
831graph::get_edge_by_id (const char *id) const
832{
834}
835
836inline edge
837graph::add_edge (const char *id,
838 node src_node, node dst_node,
839 const char *label)
840{
842 id,
843 src_node.m_inner,
844 dst_node.m_inner,
845 label));
846}
847
848// class node
849
850inline void
851node::set_label (const char *label)
852{
854}
855
856inline void
861
862inline void
867
868} // namespace libgdiagnostics
869
870#endif // #ifndef LIBGDIAGNOSTICSPP_H
Definition genoutput.cc:150
Definition libgdiagnostics++.h:213
diagnostic(::diagnostic *d)
Definition libgdiagnostics++.h:215
void void ::diagnostic *const m_inner
Definition libgdiagnostics++.h:264
Definition libgdiagnostics++.h:490
diagnostic_edge * m_inner
Definition libgdiagnostics++.h:494
edge(diagnostic_edge *edge_)
Definition libgdiagnostics++.h:492
Definition libgdiagnostics++.h:140
execution_path(const diagnostic_execution_path *path)
Definition libgdiagnostics++.h:148
execution_path()
Definition libgdiagnostics++.h:142
diagnostic_event_id diagnostic_event_id add_event_va(physical_location physical_loc, logical_location logical_loc, unsigned stack_depth, const char *fmt, va_list *args) LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(5
Definition libgdiagnostics++.h:580
execution_path(const execution_path &other)=delete
diagnostic_event_id diagnostic_event_id diagnostic_execution_path * m_inner
Definition libgdiagnostics++.h:194
execution_path(execution_path &&other)
Definition libgdiagnostics++.h:156
execution_path & operator=(const execution_path &other)=delete
bool m_owned
Definition libgdiagnostics++.h:195
diagnostic_event_id add_event(physical_location physical_loc, logical_location logical_loc, unsigned stack_depth, const char *fmt,...) LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(5
Definition libgdiagnostics++.h:563
~execution_path()
Definition libgdiagnostics++.h:173
execution_path(diagnostic_execution_path *path)
Definition libgdiagnostics++.h:144
Definition libgdiagnostics++.h:76
file(diagnostic_file *file)
Definition libgdiagnostics++.h:79
file(const file &other)
Definition libgdiagnostics++.h:80
file & operator=(const file &other)
Definition libgdiagnostics++.h:81
void set_buffered_content(const char *data, size_t sz)
Definition libgdiagnostics++.h:502
diagnostic_file * m_inner
Definition libgdiagnostics++.h:85
file()
Definition libgdiagnostics++.h:78
Definition libgdiagnostics++.h:412
diagnostic_graph * m_inner
Definition libgdiagnostics++.h:463
node get_node_by_id(const char *id) const
Definition libgdiagnostics++.h:825
edge add_edge(const char *id, node src_node, node dst_node, const char *label)
Definition libgdiagnostics++.h:837
graph(const graph &other)=delete
graph(diagnostic_graph *graph)
Definition libgdiagnostics++.h:416
void set_description(const char *)
Definition libgdiagnostics++.h:819
edge get_edge_by_id(const char *id) const
Definition libgdiagnostics++.h:831
graph(graph &&other)
Definition libgdiagnostics++.h:428
bool m_owned
Definition libgdiagnostics++.h:464
graph(const diagnostic_graph *graph)
Definition libgdiagnostics++.h:420
graph()
Definition libgdiagnostics++.h:414
~graph()
Definition libgdiagnostics++.h:445
Definition libgdiagnostics++.h:201
manager & m_mgr
Definition libgdiagnostics++.h:207
group(manager &mgr)
Definition libgdiagnostics++.h:597
~group()
Definition libgdiagnostics++.h:604
Definition libgdiagnostics++.h:107
const char * get_decorated_name() const
Definition libgdiagnostics++.h:552
const diagnostic_logical_location * m_inner
Definition libgdiagnostics++.h:134
logical_location(const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics++.h:111
bool operator==(const logical_location &other) const
Definition libgdiagnostics++.h:124
const char * get_short_name() const
Definition libgdiagnostics++.h:534
enum diagnostic_logical_location_kind_t get_kind() const
Definition libgdiagnostics++.h:518
const char * get_fully_qualified_name() const
Definition libgdiagnostics++.h:543
bool operator!=(const logical_location &other) const
Definition libgdiagnostics++.h:129
logical_location get_parent() const
Definition libgdiagnostics++.h:525
logical_location()
Definition libgdiagnostics++.h:109
Definition libgdiagnostics++.h:270
manager(diagnostic_manager *inner, bool owned)
Definition libgdiagnostics++.h:277
execution_path new_execution_path()
Definition libgdiagnostics++.h:791
void take_global_graph(graph g)
Definition libgdiagnostics++.h:809
~manager()
Definition libgdiagnostics++.h:282
manager(manager &&other)
Definition libgdiagnostics++.h:289
physical_location new_location_from_file_and_line(file f, diagnostic_line_num_t line_num)
Definition libgdiagnostics++.h:724
diagnostic_manager * m_inner
Definition libgdiagnostics++.h:407
manager()
Definition libgdiagnostics++.h:272
void set_tool_name(const char *value)
Definition libgdiagnostics++.h:297
physical_location new_location_from_file_line_column(file f, line_num_t line_num, column_num_t column_num)
Definition libgdiagnostics++.h:734
void debug_dump(file f, FILE *out)
diagnostic begin_diagnostic(enum diagnostic_level level)
Definition libgdiagnostics++.h:797
file new_file(const char *name, const char *sarif_source_language) LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL(3)
Definition libgdiagnostics++.h:716
manager(const manager &other)=delete
physical_location new_location_from_range(physical_location loc_caret, physical_location loc_start, physical_location loc_end)
Definition libgdiagnostics++.h:746
void set_version_string(const char *value)
Definition libgdiagnostics++.h:309
void write_patch(FILE *dst_stream)
Definition libgdiagnostics++.h:350
void set_analysis_target(file f)
Definition libgdiagnostics++.h:803
bool add_sink_from_spec(const char *option_name, const char *spec, manager control_mgr)
Definition libgdiagnostics++.h:339
logical_location new_logical_location(enum diagnostic_logical_location_kind_t kind, logical_location parent, const char *short_name, const char *fully_qualified_name, const char *decorated_name)
Definition libgdiagnostics++.h:766
text_sink add_text_sink(FILE *dst_stream, enum diagnostic_colorize colorize)
Definition libgdiagnostics++.h:321
void add_sarif_sink(FILE *dst_stream, file main_input_file, enum diagnostic_sarif_version version)
Definition libgdiagnostics++.h:329
bool m_owned
Definition libgdiagnostics++.h:408
void set_version_url(const char *value)
Definition libgdiagnostics++.h:315
void set_full_name(const char *value)
Definition libgdiagnostics++.h:303
Definition libgdiagnostics++.h:470
diagnostic_node * m_inner
Definition libgdiagnostics++.h:484
void set_label(const char *)
Definition libgdiagnostics++.h:851
void set_logical_location(logical_location loc)
Definition libgdiagnostics++.h:863
node()
Definition libgdiagnostics++.h:472
node(diagnostic_node *node_)
Definition libgdiagnostics++.h:473
void set_location(physical_location loc)
Definition libgdiagnostics++.h:857
Definition libgdiagnostics++.h:91
file get_file() const
Definition libgdiagnostics++.h:510
const diagnostic_physical_location * m_inner
Definition libgdiagnostics++.h:101
physical_location()
Definition libgdiagnostics++.h:93
physical_location(const diagnostic_physical_location *location)
Definition libgdiagnostics++.h:95
Definition libgdiagnostics++.h:44
void set_labelled_source_colorization_enabled(int value)
Definition libgdiagnostics++.h:64
void set_source_printing_enabled(int value)
Definition libgdiagnostics++.h:52
void set_colorize(enum diagnostic_colorize colorize)
Definition libgdiagnostics++.h:58
diagnostic_text_sink * m_inner
Definition libgdiagnostics++.h:70
text_sink(diagnostic_text_sink *inner)
Definition libgdiagnostics++.h:46
static struct path_prefix cpath path
Definition collect2.cc:514
gcc::context * g
Definition context.cc:29
class edge_def * edge
Definition coretypes.h:352
struct graph_edge * add_edge(struct graph *g, int f, int t)
Definition graphds.cc:65
void diagnostic_graph_set_description(diagnostic_graph *graph, const char *desc)
Definition libgdiagnostics.cc:2242
void diagnostic_manager_release(diagnostic_manager *diag_mgr)
Definition libgdiagnostics.cc:1390
void diagnostic_graph_release(diagnostic_graph *graph)
Definition libgdiagnostics.cc:2234
diagnostic_edge * diagnostic_graph_get_edge_by_id(diagnostic_graph *graph, const char *id)
Definition libgdiagnostics.cc:2292
const char * diagnostic_logical_location_get_short_name(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2081
void diagnostic_manager_set_full_name(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1410
diagnostic_text_sink * diagnostic_manager_add_text_sink(diagnostic_manager *diag_mgr, FILE *dst_stream, enum diagnostic_colorize colorize)
Definition libgdiagnostics.cc:1446
const diagnostic_logical_location * diagnostic_manager_new_logical_location(diagnostic_manager *diag_mgr, enum diagnostic_logical_location_kind_t kind, const diagnostic_logical_location *parent, const char *short_name, const char *fully_qualified_name, const char *decorated_name)
Definition libgdiagnostics.cc:1663
void diagnostic_add_location(diagnostic *diag, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1841
void diagnostic_add_fix_it_hint_delete(diagnostic *diag, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1926
void diagnostic_manager_write_patch(diagnostic_manager *diag_mgr, FILE *dst_stream)
Definition libgdiagnostics.cc:1529
void diagnostic_take_graph(diagnostic *diag, diagnostic_graph *graph)
Definition libgdiagnostics.cc:2222
diagnostic_node * diagnostic_graph_get_node_by_id(diagnostic_graph *graph, const char *id)
Definition libgdiagnostics.cc:2280
enum diagnostic_logical_location_kind_t diagnostic_logical_location_get_kind(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2065
void diagnostic_manager_set_analysis_target(diagnostic_manager *mgr, const diagnostic_file *file)
Definition libgdiagnostics.cc:2159
void diagnostic_manager_add_sarif_sink(diagnostic_manager *diag_mgr, FILE *dst_stream, const diagnostic_file *main_input_file, enum diagnostic_sarif_version version)
Definition libgdiagnostics.cc:1496
diagnostic_edge * diagnostic_graph_add_edge(diagnostic_graph *graph, const char *id, diagnostic_node *src_node, diagnostic_node *dst_node, const char *label)
Definition libgdiagnostics.cc:2264
void diagnostic_text_sink_set_labelled_source_colorization_enabled(diagnostic_text_sink *text_sink, int value)
Definition libgdiagnostics.cc:1484
const diagnostic_logical_location * diagnostic_logical_location_get_parent(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2073
void diagnostic_manager_end_group(diagnostic_manager *diag_mgr)
Definition libgdiagnostics.cc:1786
const diagnostic_physical_location * diagnostic_manager_new_location_from_range(diagnostic_manager *diag_mgr, const diagnostic_physical_location *loc_caret, const diagnostic_physical_location *loc_start, const diagnostic_physical_location *loc_end)
Definition libgdiagnostics.cc:1618
void diagnostic_add_rule(diagnostic *diag, const char *title, const char *url)
Definition libgdiagnostics.cc:1817
int diagnostic_manager_add_sink_from_spec(diagnostic_manager *affected_mgr, const char *option_name, const char *spec, diagnostic_manager *control_mgr)
Definition libgdiagnostics.cc:2138
void diagnostic_node_set_label(diagnostic_node *node, const char *label)
Definition libgdiagnostics.cc:2315
diagnostic * diagnostic_begin(diagnostic_manager *diag_mgr, enum diagnostic_level level)
Definition libgdiagnostics.cc:1795
void diagnostic_text_sink_set_colorize(diagnostic_text_sink *text_sink, enum diagnostic_colorize colorize)
Definition libgdiagnostics.cc:1473
void diagnostic_node_set_location(diagnostic_node *node, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:2304
diagnostic_manager * diagnostic_manager_new(void)
Definition libgdiagnostics.cc:1382
void diagnostic_set_location(diagnostic *diag, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1829
void diagnostic_add_fix_it_hint_insert_before(diagnostic *diag, const diagnostic_physical_location *loc, const char *addition)
Definition libgdiagnostics.cc:1878
void diagnostic_manager_debug_dump_logical_location(const diagnostic_manager *diag_mgr, const diagnostic_logical_location *loc, FILE *out)
Definition libgdiagnostics.cc:1680
diagnostic_event_id diagnostic_execution_path_add_event_va(diagnostic_execution_path *path, const diagnostic_physical_location *physical_loc, const diagnostic_logical_location *logical_loc, unsigned stack_depth, const char *gmsgid, va_list *args)
Definition libgdiagnostics.cc:2003
const char * diagnostic_logical_location_get_fully_qualified_name(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2089
diagnostic_file * diagnostic_physical_location_get_file(const diagnostic_physical_location *physical_loc)
Definition libgdiagnostics.cc:2054
const diagnostic_physical_location * diagnostic_manager_new_location_from_file_line_column(diagnostic_manager *diag_mgr, const diagnostic_file *file, diagnostic_line_num_t line_num, diagnostic_column_num_t column_num)
Definition libgdiagnostics.cc:1602
void diagnostic_manager_set_version_url(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1434
void diagnostic_file_set_buffered_content(diagnostic_file *file, const char *buf, size_t sz)
Definition libgdiagnostics.cc:1554
void diagnostic_set_logical_location(diagnostic *diag, const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics.cc:1867
void diagnostic_add_fix_it_hint_replace(diagnostic *diag, const diagnostic_physical_location *loc, const char *replacement)
Definition libgdiagnostics.cc:1910
void diagnostic_manager_debug_dump_location(const diagnostic_manager *diag_mgr, const diagnostic_physical_location *loc, FILE *out)
Definition libgdiagnostics.cc:1633
void diagnostic_manager_set_version_string(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1422
void diagnostic_add_location_with_label(diagnostic *diag, const diagnostic_physical_location *loc, const char *text)
Definition libgdiagnostics.cc:1853
diagnostic_file * diagnostic_manager_new_file(diagnostic_manager *diag_mgr, const char *name, const char *sarif_source_language)
Definition libgdiagnostics.cc:1541
void diagnostic_manager_begin_group(diagnostic_manager *diag_mgr)
Definition libgdiagnostics.cc:1777
void diagnostic_manager_set_tool_name(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1398
void diagnostic_set_cwe(diagnostic *diag, unsigned cwe_id)
Definition libgdiagnostics.cc:1806
void diagnostic_manager_take_global_graph(diagnostic_manager *manager, diagnostic_graph *graph)
Definition libgdiagnostics.cc:2212
void diagnostic_finish_va(diagnostic *diag, const char *gmsgid, va_list *args)
Definition libgdiagnostics.cc:2037
const char * diagnostic_logical_location_get_decorated_name(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2097
void diagnostic_execution_path_release(diagnostic_execution_path *path)
Definition libgdiagnostics.cc:1971
void diagnostic_add_fix_it_hint_insert_after(diagnostic *diag, const diagnostic_physical_location *loc, const char *addition)
Definition libgdiagnostics.cc:1894
void diagnostic_node_set_logical_location(diagnostic_node *node, const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics.cc:2324
void diagnostic_text_sink_set_source_printing_enabled(diagnostic_text_sink *text_sink, int value)
Definition libgdiagnostics.cc:1462
const diagnostic_physical_location * diagnostic_manager_new_location_from_file_and_line(diagnostic_manager *diag_mgr, const diagnostic_file *file, diagnostic_line_num_t linenum)
Definition libgdiagnostics.cc:1589
diagnostic_execution_path * diagnostic_manager_new_execution_path(diagnostic_manager *manager)
Definition libgdiagnostics.cc:1949
void diagnostic_take_execution_path(diagnostic *diag, diagnostic_execution_path *path)
Definition libgdiagnostics.cc:1959
#define LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL(ARG_NUM)
Definition libgdiagnostics.h:50
int diagnostic_event_id
Definition libgdiagnostics.h:231
#define LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(FMT_ARG_NUM, ARGS_ARG_NUM)
Definition libgdiagnostics.h:53
#define LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL(ARG_NUM)
Definition libgdiagnostics.h:47
diagnostic_logical_location_kind_t
Definition libgdiagnostics.h:163
unsigned int diagnostic_line_num_t
Definition libgdiagnostics.h:148
diagnostic_sarif_version
Definition libgdiagnostics.h:90
diagnostic_colorize
Definition libgdiagnostics.h:81
unsigned int diagnostic_column_num_t
Definition libgdiagnostics.h:149
diagnostic_level
Definition libgdiagnostics.h:219
struct diagnostic diagnostic
Definition libgdiagnostics.h:216
logical_location_manager::key logical_location
Definition logical-location.h:173
@ text
Definition logical-location.h:49
@ value
Definition logical-location.h:59
Definition libgdiagnostics++.h:25
diagnostic_line_num_t line_num_t
Definition libgdiagnostics++.h:27
diagnostic_column_num_t column_num_t
Definition libgdiagnostics++.h:28
static void const char va_list ap
Definition read-md.cc:205
Definition libgdiagnostics.cc:777
Definition libgdiagnostics.cc:900
Definition libgdiagnostics.cc:114
Definition libgdiagnostics.cc:754
Definition libgdiagnostics.cc:171
Definition libgdiagnostics.cc:435
Definition libgdiagnostics.cc:768
Definition libgdiagnostics.cc:147
Definition libgdiagnostics.cc:226
void add_location_with_label(const diagnostic_physical_location *loc, const char *text)
Definition libgdiagnostics.cc:1033
void set_cwe(unsigned cwe_id)
Definition libgdiagnostics.cc:1007
void set_location(const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1020
void take_graph(std::unique_ptr< diagnostic_graph > graph)
Definition libgdiagnostics.cc:1072
void take_execution_path(diagnostic_execution_path *path)
Definition libgdiagnostics.cc:1065
void add_location(const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1026
void add_rule(const char *title, const char *url)
Definition libgdiagnostics.cc:1012
void set_logical_location(const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics.cc:1045
Definition reload.cc:154
#define true
Definition system.h:887
#define false
Definition system.h:888
#define bool
Definition system.h:886