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;
40class message_buffer;
41
42/* Wrapper around a borrowed diagnostic_text_sink *. */
43
73
74/* Wrapper around a diagnostic_file *. */
75
76class file
77{
78public:
79 file () : m_inner (nullptr) {}
81 file (const file &other) : m_inner (other.m_inner) {}
82 file &operator= (const file &other) { m_inner = other.m_inner; return *this; }
83
84 void set_buffered_content (const char *data, size_t sz);
85
87};
88
89/* Wrapper around a const diagnostic_physical_location *. */
90
92{
93public:
94 physical_location () : m_inner (nullptr) {}
95
97 : m_inner (location)
98 {}
99
100 file get_file () const;
101
103};
104
105/* Wrapper around a const diagnostic_logical_location *. */
106
108{
109public:
110 logical_location () : m_inner (nullptr) {}
111
113 : m_inner (logical_loc)
114 {}
115
116 operator bool() { return m_inner != nullptr; }
117
118 // Various accessors
121 const char *get_short_name () const;
122 const char *get_fully_qualified_name () const;
123 const char *get_decorated_name () const;
124
125 bool operator== (const logical_location &other) const
126 {
127 return m_inner == other.m_inner;
128 }
129
130 bool operator!= (const logical_location &other) const
131 {
132 return m_inner != other.m_inner;
133 }
134
136};
137
138/* Wrapper around a diagnostic_message_buffer *, with ownership. */
139
141{
142public:
143 message_buffer () : m_inner (nullptr) {}
150 message_buffer (const message_buffer &) = delete;
152 {
153 m_inner = other.m_inner;
154 other.m_inner = nullptr;
155 }
158 {
159 if (m_inner)
161 m_inner = other.m_inner;
162 other.m_inner = nullptr;
163 return *this;
164 }
165
167 operator+= (const char *str)
168 {
170 return *this;
171 }
172
174 operator+= (char ch)
175 {
177 return *this;
178 }
179
181 begin_url (const char *url)
182 {
184 return *this;
185 }
186
189 {
191 return *this;
192 }
193
195};
196
197/* RAII class around a diagnostic_execution_path *. */
198
200{
201public:
202 execution_path () : m_inner (nullptr), m_owned (false) {}
203
207
212
213 execution_path (const execution_path &other) = delete;
214 execution_path &operator= (const execution_path &other) = delete;
215
217 : m_inner (other.m_inner),
218 m_owned (other.m_owned)
219 {
220 other.m_inner = nullptr;
221 other.m_owned = false;
222 }
223
225 {
226 m_inner = other.m_inner;
227 m_owned = other.m_owned;
228 other.m_inner = nullptr;
229 other.m_owned = false;
230 return *this;
231 }
232
238
240 add_event (physical_location physical_loc,
241 logical_location logical_loc,
242 unsigned stack_depth,
243 const char *fmt, ...)
245
247 add_event_va (physical_location physical_loc,
248 logical_location logical_loc,
249 unsigned stack_depth,
250 const char *fmt,
251 va_list *args)
253
256 logical_location logical_loc,
257 unsigned stack_depth,
258 message_buffer &&msg_buf);
259
262};
263
264/* RAII class for starting/ending a group within a diagnostic_manager. */
265
266class group
267{
268public:
269 group (manager &mgr);
270 ~group ();
271
272private:
274};
275
276/* Wrapper around a diagnostic *. */
277
279{
280public:
282
283 void
284 set_cwe (unsigned cwe_id);
285
286 void
287 add_rule (const char *title, const char *url);
288
289 void
290 set_location (physical_location loc);
291
292 void
293 add_location (physical_location loc);
294
295 void
296 add_location_with_label (physical_location loc,
297 const char *text);
298
299 void
300 add_location_with_label (physical_location loc,
301 message_buffer &&text);
302
303 void
304 set_logical_location (logical_location loc);
305
306 void
307 add_fix_it_hint_insert_before (physical_location loc,
308 const char *addition);
309 void
310 add_fix_it_hint_insert_after (physical_location loc,
311 const char *addition);
312 void
313 add_fix_it_hint_replace (physical_location loc,
314 const char *replacement);
315 void
316 add_fix_it_hint_delete (physical_location loc);
317
318 void
319 take_execution_path (execution_path path);
320
321 void
322 take_graph (graph g);
323
324 void
325 finish (const char *fmt, ...)
328
329 void
330 finish_va (const char *fmt, va_list *args)
333
334 void
335 finish_via_msg_buf (message_buffer &&msg_buf);
336
338};
339
340/* Wrapper around a diagnostic_manager *, possibly with ownership. */
341
343{
344public:
347 m_owned (true)
348 {
349 }
350 manager (diagnostic_manager *inner, bool owned)
351 : m_inner (inner),
352 m_owned (owned)
353 {
354 }
356 {
357 if (m_owned)
359 }
360
361 manager (const manager &other) = delete;
362 manager (manager &&other)
363 : m_inner (other.m_inner),
364 m_owned (other.m_owned)
365 {
366 other.m_inner = nullptr;
367 }
368
369 void
370 set_tool_name (const char *value)
371 {
373 }
374
375 void
376 set_full_name (const char *value)
377 {
379 }
380
381 void
382 set_version_string (const char *value)
383 {
385 }
386
387 void
388 set_version_url (const char *value)
389 {
391 }
392
394 add_text_sink (FILE *dst_stream,
395 enum diagnostic_colorize colorize)
396 {
397 return text_sink
398 (diagnostic_manager_add_text_sink (m_inner, dst_stream, colorize));
399 }
400
401 void
402 add_sarif_sink (FILE *dst_stream,
403 file main_input_file,
404 enum diagnostic_sarif_version version)
405 {
407 main_input_file.m_inner,
408 version);
409 }
410
411 bool
412 add_sink_from_spec (const char *option_name,
413 const char *spec,
414 manager control_mgr)
415 {
417 option_name,
418 spec,
419 control_mgr.m_inner);
420 }
421
422 void
423 write_patch (FILE *dst_stream)
424 {
426 }
427
428 /* Location management. */
429
430 file
431 new_file (const char *name,
432 const char *sarif_source_language)
435
436 void
438 FILE *out);
439
442
445 line_num_t line_num,
446 column_num_t column_num);
447
450 physical_location loc_start,
451 physical_location loc_end);
452
453 void
455 FILE *out);
456
459 logical_location parent,
460 const char *short_name,
461 const char *fully_qualified_name,
462 const char *decorated_name);
463
464 void
466 FILE *out);
467
470
473
474 void
476
477 void
479
480 void
481 set_debug_physical_locations (bool value);
482
485};
486
487class graph
488{
489public:
490 graph () : m_inner (nullptr), m_owned (false) {}
491
495
497 : m_inner (const_cast<diagnostic_graph *> (graph)),
498 m_owned (false)
499 {}
500
501 graph (const graph &other) = delete;
502 graph &operator= (const graph &other) = delete;
503
504 graph (graph &&other)
505 : m_inner (other.m_inner),
506 m_owned (other.m_owned)
507 {
508 other.m_inner = nullptr;
509 other.m_owned = false;
510 }
511
512 graph &operator= (graph &&other)
513 {
514 m_inner = other.m_inner;
515 m_owned = other.m_owned;
516 other.m_inner = nullptr;
517 other.m_owned = false;
518 return *this;
519 }
520
522 {
523 if (m_owned)
525 }
526
527 void
528 set_description (const char *);
529 void
530 set_description (message_buffer &&);
531
532 node
533 get_node_by_id (const char *id) const;
534
535 edge
536 get_edge_by_id (const char *id) const;
537
538 edge
539 add_edge (const char *id, node src_node, node dst_node, const char *label);
540 edge
541 add_edge (const char *id, node src_node, node dst_node, message_buffer &&label);
542
545};
546
547// Borrowed pointer to a diagnostic_node.
548
549class node
550{
551public:
552 node () : m_inner (nullptr) {}
553 node (diagnostic_node *node_) : m_inner (node_) {}
554
555 void
556 set_label (const char *);
557 void
558 set_label (message_buffer &&);
559
560 void
561 set_location (physical_location loc);
562
563 void
564 set_logical_location (logical_location loc);
565
567};
568
569// Borrowed edge to a diagnostic_edge.
570
571class edge
572{
573public:
574 edge (diagnostic_edge *edge_) : m_inner (edge_) {}
575
577};
578
579// Implementation
580
581// class file
582
583inline void
588
589// class physical_location
590
591inline file
596
597// class logical_location
598
601{
602 // m_inner must be non-null
604}
605
606inline logical_location
608{
609 if (m_inner)
611 else
612 return nullptr;
613}
614
615inline const char *
617{
618 if (m_inner)
620 else
621 return nullptr;
622}
623
624inline const char *
626{
627 if (m_inner)
629 else
630 return nullptr;
631}
632
633inline const char *
635{
636 if (m_inner)
638 else
639 return nullptr;
640}
641
642// class execution_path
643
646 logical_location logical_loc,
647 unsigned stack_depth,
648 const char *fmt, ...)
649{
650 va_list args;
651 va_start (args, fmt);
652 diagnostic_event_id result = add_event_va (physical_loc,
653 logical_loc,
654 stack_depth,
655 fmt, &args);
656 va_end (args);
657
658 return result;
659}
660
663 logical_location logical_loc,
664 unsigned stack_depth,
665 const char *fmt,
666 va_list *args)
667{
669 physical_loc.m_inner,
670 logical_loc.m_inner,
671 stack_depth,
672 fmt,
673 args);
674}
675
678 logical_location logical_loc,
679 unsigned stack_depth,
680 message_buffer &&msg_buf)
681{
682 diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
683 msg_buf.m_inner = nullptr;
685 physical_loc.m_inner,
686 logical_loc.m_inner,
687 stack_depth,
688 inner_msg_buf);
689}
690
691// class group
692
693inline
695: m_mgr (mgr)
696{
698}
699
700inline
705
706// class diagnostic
707
708inline void
709diagnostic::set_cwe (unsigned cwe_id)
710{
711 diagnostic_set_cwe (m_inner, cwe_id);
712}
713
714inline void
715diagnostic::add_rule (const char *title, const char *url)
716{
717 diagnostic_add_rule (m_inner, title, url);
718}
719
720inline void
725
726inline void
732
733inline void
735 message_buffer &&msg_buf)
736{
737 diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
738 msg_buf.m_inner = nullptr;
740 loc.m_inner,
741 inner_msg_buf);
742}
743
744inline void
749
750inline void
755
756inline void
757diagnostic::add_fix_it_hint_insert_before (physical_location loc,
758 const char *addition)
759{
761 loc.m_inner,
762 addition);
763}
764
765inline void
766diagnostic::add_fix_it_hint_insert_after (physical_location loc,
767 const char *addition)
768{
770 loc.m_inner,
771 addition);
772}
773
774inline void
775diagnostic::add_fix_it_hint_replace (physical_location loc,
776 const char *replacement)
777{
779 loc.m_inner,
781}
782
783inline void
784diagnostic::add_fix_it_hint_delete (physical_location loc)
785{
787 loc.m_inner);
788}
789
790inline void
797
798inline void
800{
802 g.m_inner);
803 g.m_owned = false;
804}
805
806inline void
807diagnostic::finish (const char *fmt, ...)
808{
809 va_list ap;
810 va_start (ap, fmt);
812 va_end (ap);
813}
814
815inline void
816diagnostic::finish_va (const char *fmt, va_list *args)
817{
818 diagnostic_finish_va (m_inner, fmt, args);
819}
820
821inline void
822diagnostic::finish_via_msg_buf (message_buffer &&msg_buf)
823{
824 diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
825 msg_buf.m_inner = nullptr;
826 diagnostic_finish_via_msg_buf (m_inner, inner_msg_buf);
827}
828
829// class manager
830
831inline file
832manager::new_file (const char *name,
833 const char *sarif_source_language)
834{
835 return file
836 (diagnostic_manager_new_file (m_inner, name, sarif_source_language));
837}
838
848
851 line_num_t line_num,
852 column_num_t column_num)
853{
854 return physical_location
856 f.m_inner,
857 line_num,
858 column_num));
859}
860
863 physical_location loc_start,
864 physical_location loc_end)
865{
866 return physical_location
868 loc_caret.m_inner,
869 loc_start.m_inner,
870 loc_end.m_inner));
871}
872
873inline void
881inline logical_location
883 logical_location parent,
884 const char *short_name,
885 const char *fully_qualified_name,
886 const char *decorated_name)
887{
888 return logical_location
890 kind,
891 parent.m_inner,
892 short_name,
893 fully_qualified_name,
894 decorated_name));
895}
896
897inline void
905
906inline execution_path
911
912inline diagnostic
917
918inline void
923
924inline void
926{
928 g.m_inner);
929 g.m_owned = false;
930}
931
932inline void
938
939// class graph
940
941inline void
942graph::set_description (const char *desc)
943{
945}
946
947inline void
949{
950 diagnostic_message_buffer *inner_msg_buf = msg_buf.m_inner;
951 msg_buf.m_inner = nullptr;
953}
954
955inline node
956graph::get_node_by_id (const char *id) const
957{
959}
960
961inline edge
962graph::get_edge_by_id (const char *id) const
963{
965}
966
967inline edge
968graph::add_edge (const char *id,
969 node src_node, node dst_node,
970 const char *label)
971{
973 id,
974 src_node.m_inner,
975 dst_node.m_inner,
976 label));
977}
978
979inline edge
980graph::add_edge (const char *id,
981 node src_node, node dst_node,
982 message_buffer &&label)
983{
984 diagnostic_message_buffer *inner_label = label.m_inner;
985 label.m_inner = nullptr;
987 id,
988 src_node.m_inner,
989 dst_node.m_inner,
990 inner_label));
991}
992
993// class node
994
995inline void
996node::set_label (const char *label)
997{
999}
1000
1001inline void
1003{
1004 diagnostic_message_buffer *inner_label = label.m_inner;
1005 label.m_inner = nullptr;
1007}
1008
1009inline void
1014
1015inline void
1020
1021} // namespace libgdiagnostics
1022
1023#endif // #ifndef LIBGDIAGNOSTICSPP_H
Definition genoutput.cc:150
Definition libgdiagnostics++.h:279
diagnostic(::diagnostic *d)
Definition libgdiagnostics++.h:281
::diagnostic *const m_inner
Definition libgdiagnostics++.h:337
Definition libgdiagnostics++.h:572
diagnostic_edge * m_inner
Definition libgdiagnostics++.h:576
edge(diagnostic_edge *edge_)
Definition libgdiagnostics++.h:574
Definition libgdiagnostics++.h:200
execution_path(const diagnostic_execution_path *path)
Definition libgdiagnostics++.h:208
diagnostic_event_id diagnostic_event_id diagnostic_event_id add_event_via_msg_buf(physical_location physical_loc, logical_location logical_loc, unsigned stack_depth, message_buffer &&msg_buf)
Definition libgdiagnostics++.h:677
execution_path()
Definition libgdiagnostics++.h:202
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:662
execution_path(const execution_path &other)=delete
execution_path(execution_path &&other)
Definition libgdiagnostics++.h:216
execution_path & operator=(const execution_path &other)=delete
diagnostic_execution_path * m_inner
Definition libgdiagnostics++.h:260
bool m_owned
Definition libgdiagnostics++.h:261
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:645
~execution_path()
Definition libgdiagnostics++.h:233
execution_path(diagnostic_execution_path *path)
Definition libgdiagnostics++.h:204
Definition libgdiagnostics++.h:77
file(diagnostic_file *file)
Definition libgdiagnostics++.h:80
file(const file &other)
Definition libgdiagnostics++.h:81
file & operator=(const file &other)
Definition libgdiagnostics++.h:82
void set_buffered_content(const char *data, size_t sz)
Definition libgdiagnostics++.h:584
diagnostic_file * m_inner
Definition libgdiagnostics++.h:86
file()
Definition libgdiagnostics++.h:79
Definition libgdiagnostics++.h:488
diagnostic_graph * m_inner
Definition libgdiagnostics++.h:543
node get_node_by_id(const char *id) const
Definition libgdiagnostics++.h:956
edge add_edge(const char *id, node src_node, node dst_node, const char *label)
Definition libgdiagnostics++.h:968
graph(const graph &other)=delete
graph(diagnostic_graph *graph)
Definition libgdiagnostics++.h:492
void set_description(const char *)
Definition libgdiagnostics++.h:942
edge get_edge_by_id(const char *id) const
Definition libgdiagnostics++.h:962
graph(graph &&other)
Definition libgdiagnostics++.h:504
bool m_owned
Definition libgdiagnostics++.h:544
graph(const diagnostic_graph *graph)
Definition libgdiagnostics++.h:496
graph()
Definition libgdiagnostics++.h:490
~graph()
Definition libgdiagnostics++.h:521
Definition libgdiagnostics++.h:267
manager & m_mgr
Definition libgdiagnostics++.h:273
group(manager &mgr)
Definition libgdiagnostics++.h:694
~group()
Definition libgdiagnostics++.h:701
Definition libgdiagnostics++.h:108
const char * get_decorated_name() const
Definition libgdiagnostics++.h:634
const diagnostic_logical_location * m_inner
Definition libgdiagnostics++.h:135
logical_location(const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics++.h:112
bool operator==(const logical_location &other) const
Definition libgdiagnostics++.h:125
const char * get_short_name() const
Definition libgdiagnostics++.h:616
enum diagnostic_logical_location_kind_t get_kind() const
Definition libgdiagnostics++.h:600
const char * get_fully_qualified_name() const
Definition libgdiagnostics++.h:625
bool operator!=(const logical_location &other) const
Definition libgdiagnostics++.h:130
logical_location get_parent() const
Definition libgdiagnostics++.h:607
logical_location()
Definition libgdiagnostics++.h:110
Definition libgdiagnostics++.h:343
manager(diagnostic_manager *inner, bool owned)
Definition libgdiagnostics++.h:350
execution_path new_execution_path()
Definition libgdiagnostics++.h:907
void take_global_graph(graph g)
Definition libgdiagnostics++.h:925
~manager()
Definition libgdiagnostics++.h:355
manager(manager &&other)
Definition libgdiagnostics++.h:362
physical_location new_location_from_file_and_line(file f, diagnostic_line_num_t line_num)
Definition libgdiagnostics++.h:840
diagnostic_manager * m_inner
Definition libgdiagnostics++.h:483
manager()
Definition libgdiagnostics++.h:345
void set_tool_name(const char *value)
Definition libgdiagnostics++.h:370
physical_location new_location_from_file_line_column(file f, line_num_t line_num, column_num_t column_num)
Definition libgdiagnostics++.h:850
void debug_dump(file f, FILE *out)
diagnostic begin_diagnostic(enum diagnostic_level level)
Definition libgdiagnostics++.h:913
file new_file(const char *name, const char *sarif_source_language) LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL(3)
Definition libgdiagnostics++.h:832
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:862
void set_version_string(const char *value)
Definition libgdiagnostics++.h:382
void write_patch(FILE *dst_stream)
Definition libgdiagnostics++.h:423
void set_analysis_target(file f)
Definition libgdiagnostics++.h:919
void set_debug_physical_locations(bool value)
Definition libgdiagnostics++.h:933
bool add_sink_from_spec(const char *option_name, const char *spec, manager control_mgr)
Definition libgdiagnostics++.h:412
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:882
text_sink add_text_sink(FILE *dst_stream, enum diagnostic_colorize colorize)
Definition libgdiagnostics++.h:394
void add_sarif_sink(FILE *dst_stream, file main_input_file, enum diagnostic_sarif_version version)
Definition libgdiagnostics++.h:402
bool m_owned
Definition libgdiagnostics++.h:484
void set_version_url(const char *value)
Definition libgdiagnostics++.h:388
void set_full_name(const char *value)
Definition libgdiagnostics++.h:376
Definition libgdiagnostics++.h:141
~message_buffer()
Definition libgdiagnostics++.h:145
message_buffer & begin_url(const char *url)
Definition libgdiagnostics++.h:181
message_buffer & operator+=(const char *str)
Definition libgdiagnostics++.h:167
message_buffer(const message_buffer &)=delete
message_buffer(message_buffer &&other)
Definition libgdiagnostics++.h:151
message_buffer()
Definition libgdiagnostics++.h:143
diagnostic_message_buffer * m_inner
Definition libgdiagnostics++.h:194
message_buffer & end_url()
Definition libgdiagnostics++.h:188
message_buffer(diagnostic_message_buffer *inner)
Definition libgdiagnostics++.h:144
message_buffer & operator=(const message_buffer &)=delete
Definition libgdiagnostics++.h:550
diagnostic_node * m_inner
Definition libgdiagnostics++.h:566
void set_label(const char *)
Definition libgdiagnostics++.h:996
void set_logical_location(logical_location loc)
Definition libgdiagnostics++.h:1016
node()
Definition libgdiagnostics++.h:552
node(diagnostic_node *node_)
Definition libgdiagnostics++.h:553
void set_location(physical_location loc)
Definition libgdiagnostics++.h:1010
Definition libgdiagnostics++.h:92
file get_file() const
Definition libgdiagnostics++.h:592
const diagnostic_physical_location * m_inner
Definition libgdiagnostics++.h:102
physical_location()
Definition libgdiagnostics++.h:94
physical_location(const diagnostic_physical_location *location)
Definition libgdiagnostics++.h:96
Definition libgdiagnostics++.h:45
void set_labelled_source_colorization_enabled(int value)
Definition libgdiagnostics++.h:65
void set_source_printing_enabled(int value)
Definition libgdiagnostics++.h:53
void set_colorize(enum diagnostic_colorize colorize)
Definition libgdiagnostics++.h:59
diagnostic_text_sink * m_inner
Definition libgdiagnostics++.h:71
text_sink(diagnostic_text_sink *inner)
Definition libgdiagnostics++.h:47
static struct path_prefix cpath path
Definition collect2.cc:514
gcc::context * g
Definition context.cc:29
class edge_def * edge
Definition coretypes.h:354
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:2612
void diagnostic_manager_release(diagnostic_manager *diag_mgr)
Definition libgdiagnostics.cc:1753
void diagnostic_graph_release(diagnostic_graph *graph)
Definition libgdiagnostics.cc:2604
const char * diagnostic_logical_location_get_short_name(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2448
void diagnostic_manager_set_full_name(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1773
void diagnostic_message_buffer_append_str(diagnostic_message_buffer *msg_buf, const char *p)
Definition libgdiagnostics.cc:2752
diagnostic_text_sink * diagnostic_manager_add_text_sink(diagnostic_manager *diag_mgr, FILE *dst_stream, enum diagnostic_colorize colorize)
Definition libgdiagnostics.cc:1809
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:2028
void diagnostic_manager_set_debug_physical_locations(diagnostic_manager *mgr, int value)
Definition libgdiagnostics.cc:3019
void diagnostic_add_location(diagnostic *diag, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:2206
diagnostic_edge * diagnostic_graph_add_edge_via_msg_buf(diagnostic_graph *graph, const char *edge_id, diagnostic_node *src_node, diagnostic_node *dst_node, diagnostic_message_buffer *label)
Definition libgdiagnostics.cc:2957
void diagnostic_add_fix_it_hint_delete(diagnostic *diag, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:2291
void diagnostic_manager_write_patch(diagnostic_manager *diag_mgr, FILE *dst_stream)
Definition libgdiagnostics.cc:1893
void diagnostic_take_graph(diagnostic *diag, diagnostic_graph *graph)
Definition libgdiagnostics.cc:2592
enum diagnostic_logical_location_kind_t diagnostic_logical_location_get_kind(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2432
void diagnostic_manager_set_analysis_target(diagnostic_manager *mgr, const diagnostic_file *file)
Definition libgdiagnostics.cc:2526
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:1859
diagnostic_event_id diagnostic_execution_path_add_event_via_msg_buf(diagnostic_execution_path *path, const diagnostic_physical_location *physical_loc, const diagnostic_logical_location *logical_loc, unsigned stack_depth, diagnostic_message_buffer *msg_buf)
Definition libgdiagnostics.cc:2921
void diagnostic_add_location_with_label_via_msg_buf(diagnostic *diag, const diagnostic_physical_location *loc, diagnostic_message_buffer *msg_buf)
Definition libgdiagnostics.cc:2906
void diagnostic_text_sink_set_labelled_source_colorization_enabled(diagnostic_text_sink *text_sink, int value)
Definition libgdiagnostics.cc:1847
const diagnostic_logical_location * diagnostic_logical_location_get_parent(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2440
void diagnostic_manager_end_group(diagnostic_manager *diag_mgr)
Definition libgdiagnostics.cc:2151
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:1983
void diagnostic_add_rule(diagnostic *diag, const char *title, const char *url)
Definition libgdiagnostics.cc:2182
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:2505
void diagnostic_node_set_label(diagnostic_node *node, const char *label)
Definition libgdiagnostics.cc:2687
diagnostic * diagnostic_begin(diagnostic_manager *diag_mgr, enum diagnostic_level level)
Definition libgdiagnostics.cc:2160
void diagnostic_graph_set_description_via_msg_buf(diagnostic_graph *graph, diagnostic_message_buffer *desc)
Definition libgdiagnostics.cc:2943
void diagnostic_text_sink_set_colorize(diagnostic_text_sink *text_sink, enum diagnostic_colorize colorize)
Definition libgdiagnostics.cc:1836
void diagnostic_node_set_location(diagnostic_node *node, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:2676
diagnostic_manager * diagnostic_manager_new(void)
Definition libgdiagnostics.cc:1745
diagnostic_node * diagnostic_graph_get_node_by_id(diagnostic_graph *graph, const char *node_id)
Definition libgdiagnostics.cc:2652
void diagnostic_set_location(diagnostic *diag, const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:2194
void diagnostic_add_fix_it_hint_insert_before(diagnostic *diag, const diagnostic_physical_location *loc, const char *addition)
Definition libgdiagnostics.cc:2243
void diagnostic_node_set_label_via_msg_buf(diagnostic_node *node, diagnostic_message_buffer *label)
Definition libgdiagnostics.cc:2981
void diagnostic_manager_debug_dump_logical_location(const diagnostic_manager *diag_mgr, const diagnostic_logical_location *loc, FILE *out)
Definition libgdiagnostics.cc:2045
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:2369
const char * diagnostic_logical_location_get_fully_qualified_name(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2456
void diagnostic_message_buffer_append_byte(diagnostic_message_buffer *msg_buf, char ch)
Definition libgdiagnostics.cc:2775
diagnostic_file * diagnostic_physical_location_get_file(const diagnostic_physical_location *physical_loc)
Definition libgdiagnostics.cc:2421
void diagnostic_message_buffer_release(diagnostic_message_buffer *msg_buf)
Definition libgdiagnostics.cc:2745
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:1967
void diagnostic_manager_set_version_url(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1797
void diagnostic_message_buffer_end_url(diagnostic_message_buffer *msg_buf)
Definition libgdiagnostics.cc:2826
void diagnostic_file_set_buffered_content(diagnostic_file *file, const char *buf, size_t sz)
Definition libgdiagnostics.cc:1918
void diagnostic_set_logical_location(diagnostic *diag, const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics.cc:2232
diagnostic_edge * diagnostic_graph_add_edge(diagnostic_graph *graph, const char *edge_id, diagnostic_node *src_node, diagnostic_node *dst_node, const char *label)
Definition libgdiagnostics.cc:2636
void diagnostic_add_fix_it_hint_replace(diagnostic *diag, const diagnostic_physical_location *loc, const char *replacement)
Definition libgdiagnostics.cc:2275
void diagnostic_manager_debug_dump_location(const diagnostic_manager *diag_mgr, const diagnostic_physical_location *loc, FILE *out)
Definition libgdiagnostics.cc:1998
void diagnostic_manager_set_version_string(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1785
void diagnostic_add_location_with_label(diagnostic *diag, const diagnostic_physical_location *loc, const char *text)
Definition libgdiagnostics.cc:2218
diagnostic_file * diagnostic_manager_new_file(diagnostic_manager *diag_mgr, const char *name, const char *sarif_source_language)
Definition libgdiagnostics.cc:1905
void diagnostic_manager_begin_group(diagnostic_manager *diag_mgr)
Definition libgdiagnostics.cc:2142
void diagnostic_manager_set_tool_name(diagnostic_manager *diag_mgr, const char *value)
Definition libgdiagnostics.cc:1761
void diagnostic_set_cwe(diagnostic *diag, unsigned cwe_id)
Definition libgdiagnostics.cc:2171
void diagnostic_manager_take_global_graph(diagnostic_manager *manager, diagnostic_graph *graph)
Definition libgdiagnostics.cc:2582
void diagnostic_finish_va(diagnostic *diag, const char *gmsgid, va_list *args)
Definition libgdiagnostics.cc:2404
const char * diagnostic_logical_location_get_decorated_name(const diagnostic_logical_location *loc)
Definition libgdiagnostics.cc:2464
void diagnostic_execution_path_release(diagnostic_execution_path *path)
Definition libgdiagnostics.cc:2336
void diagnostic_add_fix_it_hint_insert_after(diagnostic *diag, const diagnostic_physical_location *loc, const char *addition)
Definition libgdiagnostics.cc:2259
void diagnostic_message_buffer_begin_url(diagnostic_message_buffer *msg_buf, const char *url)
Definition libgdiagnostics.cc:2814
void diagnostic_finish_via_msg_buf(diagnostic *diag, diagnostic_message_buffer *msg_buf)
Definition libgdiagnostics.cc:2886
void diagnostic_node_set_logical_location(diagnostic_node *node, const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics.cc:2698
void diagnostic_text_sink_set_source_printing_enabled(diagnostic_text_sink *text_sink, int value)
Definition libgdiagnostics.cc:1825
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:1954
diagnostic_edge * diagnostic_graph_get_edge_by_id(diagnostic_graph *graph, const char *edge_id)
Definition libgdiagnostics.cc:2664
diagnostic_execution_path * diagnostic_manager_new_execution_path(diagnostic_manager *manager)
Definition libgdiagnostics.cc:2314
void diagnostic_take_execution_path(diagnostic *diag, diagnostic_execution_path *path)
Definition libgdiagnostics.cc:2324
#define LIBGDIAGNOSTICS_PARAM_CAN_BE_NULL(ARG_NUM)
Definition libgdiagnostics.h:50
int diagnostic_event_id
Definition libgdiagnostics.h:242
#define LIBGDIAGNOSTICS_PARAM_GCC_FORMAT_STRING(FMT_ARG_NUM, ARGS_ARG_NUM)
Definition libgdiagnostics.h:60
#define LIBGDIAGNOSTICS_PARAM_MUST_BE_NON_NULL(ARG_NUM)
Definition libgdiagnostics.h:47
diagnostic_logical_location_kind_t
Definition libgdiagnostics.h:174
unsigned int diagnostic_line_num_t
Definition libgdiagnostics.h:159
diagnostic_sarif_version
Definition libgdiagnostics.h:101
diagnostic_colorize
Definition libgdiagnostics.h:92
unsigned int diagnostic_column_num_t
Definition libgdiagnostics.h:160
diagnostic_level
Definition libgdiagnostics.h:230
struct diagnostic diagnostic
Definition libgdiagnostics.h:227
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:1023
Definition libgdiagnostics.cc:1146
Definition libgdiagnostics.cc:118
Definition libgdiagnostics.cc:1000
Definition libgdiagnostics.cc:175
Definition libgdiagnostics.cc:638
Definition libgdiagnostics.cc:354
Definition libgdiagnostics.cc:1014
Definition libgdiagnostics.cc:151
Definition libgdiagnostics.cc:230
void add_location_with_label(const diagnostic_physical_location *loc, const char *text)
Definition libgdiagnostics.cc:1299
void set_cwe(unsigned cwe_id)
Definition libgdiagnostics.cc:1273
void set_location(const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1286
void take_graph(std::unique_ptr< diagnostic_graph > graph)
Definition libgdiagnostics.cc:1351
void take_execution_path(diagnostic_execution_path *path)
Definition libgdiagnostics.cc:1344
void add_location(const diagnostic_physical_location *loc)
Definition libgdiagnostics.cc:1292
void add_rule(const char *title, const char *url)
Definition libgdiagnostics.cc:1278
void set_logical_location(const diagnostic_logical_location *logical_loc)
Definition libgdiagnostics.cc:1324
Definition reload.cc:154
#define true
Definition system.h:887
#define false
Definition system.h:888
#define bool
Definition system.h:886