GCC Middle and Back End API Reference
diagnostics/context.h
Go to the documentation of this file.
1/* Declare diagnostics::context and related types.
2 Copyright (C) 2000-2026 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for 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 GCC_DIAGNOSTICS_CONTEXT_H
21#define GCC_DIAGNOSTICS_CONTEXT_H
22
23#include "lazily-created.h"
24#include "unique-argv.h"
31#include "diagnostics/logging.h"
32
33namespace diagnostics {
34
35 namespace changes {
36 class change_set;
37 }
38
39 namespace digraphs { class digraph; }
40
42 class manager;
43 }
44
45 class buffer;
47 class diagram;
48 class sink;
49 class text_sink;
50 class metadata;
51
53
54} // namespace diagnostics
55
56namespace text_art
57{
58 class theme;
59} // namespace text_art
60
61namespace xml
62{
63 class printer;
64} // namespace xml
65
66namespace diagnostics {
67
68/* Forward declarations. */
69class context;
72
73typedef void (*text_starter_fn) (text_sink &,
74 const diagnostic_info *);
75
76struct to_text;
77struct to_html;
78
80
81template <typename TextOrHtml>
82using start_span_fn = void (*) (const location_print_policy &,
83 TextOrHtml &text_or_html,
84 expanded_location);
85
86typedef void (*text_finalizer_fn) (text_sink &,
87 const diagnostic_info *,
88 enum kind);
89
90/* A bundle of state for determining column numbers in diagnostics
91 (tab stops, whether to start at 0 or 1, etc).
92 Uses a file_cache to handle tabs. */
93
95{
96public:
97 column_policy (const context &dc);
98
99 int converted_column (expanded_location s) const;
100
101 label_text get_location_text (const expanded_location &s,
102 bool show_column,
103 bool colorize) const;
104
105 int get_tabstop () const { return m_column_options.m_tabstop; }
106
107private:
110};
111
112/* A bundle of state for printing locations within diagnostics
113 (e.g. "FILENAME:LINE:COLUMN"), to isolate the interactions between
114 context and the start_span callbacks. */
115
117{
118public:
119 location_print_policy (const context &dc);
121
122 bool show_column_p () const { return m_show_column; }
123
124 const column_policy &
126
127 void
129 pretty_printer &pp,
130 const expanded_location &exploc);
131
132 void
134 xml::printer &xp,
135 const expanded_location &exploc);
136
137private:
140};
141
142/* Abstract base class for optionally supplying extra tags when writing
143 out annotation labels in HTML output. */
144
146{
147public:
148 virtual ~html_label_writer () {}
149 virtual void begin_label () = 0;
150 virtual void end_label () = 0;
151};
152
153/* A bundle of state for printing source within a diagnostic,
154 to isolate the interactions between context and the
155 implementation of diagnostic_show_locus. */
156
158{
159public:
163
164 void
166 const rich_location &richloc,
167 enum kind diagnostic_kind,
168 source_effect_info *effect_info) const;
169
170 void
172 const rich_location &richloc,
173 enum kind diagnostic_kind,
174 source_effect_info *effect_info,
175 html_label_writer *label_writer) const;
176
178 get_options () const { return m_options; }
179
182
185
186 file_cache &
187 get_file_cache () const { return m_file_cache; }
188
191 {
192 return m_escape_format;
193 }
194
197
199 {
200 return m_location_policy.get_column_policy ();
201 }
202
204 {
205 return m_location_policy;
206 }
207
208private:
214
215 /* Other data copied from context. */
218};
219
220/* This class encapsulates the state of the diagnostics subsystem
221 as a whole (either directly, or via owned objects of other classes, to
222 avoid global variables).
223
224 It has responsibility for:
225 - being a central place for clients to report diagnostics
226 - reporting those diagnostics to zero or more output sinks
227 (e.g. text vs SARIF)
228 - providing a "dump" member function for a debug dump of the state of
229 the diagnostics subsytem
230 - direct vs buffered diagnostics (see class diagnostics::buffer)
231 - tracking the original argv of the program (for SARIF output)
232 - crash-handling
233
234 It delegates responsibility to various other classes:
235 - the various output sinks (instances of diagnostics::sink
236 subclasses)
237 - formatting of messages (class pretty_printer)
238 - an optional urlifier to inject URLs into formatted messages
239 - counting the number of diagnostics reported of each kind
240 (class diagnostics::counters)
241 - calling out to a option_id_manager to determine if
242 a particular warning is enabled or disabled
243 - tracking pragmas that enable/disable warnings in a range of
244 source code
245 - a cache for use when quoting the user's source code (class file_cache)
246 - a text_art::theme
247 - a diagnostics::changes::change_set for generating patches from fix-it hints
248 - diagnostics::client_data_hooks for metadata.
249
250 Try to avoid adding new responsibilities to this class itself, to avoid
251 the "blob" anti-pattern. */
252
254{
255public:
256 /* Give access to m_text_callbacks. */
257 // FIXME: these need updating
258 friend text_starter_fn &
259 text_starter (context *dc);
261 start_span (context *dc);
262 friend text_finalizer_fn &
264
266 friend class text_sink;
267 friend class buffer;
268
269 typedef void (*set_locations_callback_t) (const context &,
271
272 void initialize (int n_opts);
273 void color_init (int value);
274 void urls_init (int value);
275 void set_pretty_printer (std::unique_ptr<pretty_printer> pp);
276 void refresh_output_sinks ();
277
278 void finish ();
279
280 void dump (FILE *out, int indent) const;
281 void DEBUG_FUNCTION dump () const { dump (stderr, 0); }
282
284
285 bool execution_failed_p () const;
286
287 void set_original_argv (unique_argv original_argv);
288 const char * const *get_original_argv ()
289 {
290 return const_cast<const char * const *> (m_original_argv);
291 }
292
297
298 void
300 bool should_skip_bom);
301
302 void begin_group ();
303 void end_group ();
304
305 void push_nesting_level ();
306 void pop_nesting_level ();
307 void set_nesting_level (int new_level);
308
309 bool warning_enabled_at (location_t loc, option_id opt_id);
310
311 bool option_unspecified_p (option_id opt_id) const
312 {
313 return m_option_classifier.option_unspecified_p (opt_id);
314 }
315
317 rich_location &richloc,
318 const metadata *metadata,
319 option_id opt_id,
320 const char *gmsgid, ...)
323 rich_location &richloc,
324 const metadata *metadata,
325 option_id opt_id,
326 const char *gmsgid, va_list *ap)
328
330 void report_verbatim (text_info &);
331
332 /* Report a directed graph associated with the run as a whole
333 to any sinks that support directed graphs. */
334 void
336
337 enum kind
339 enum kind new_kind,
340 location_t where)
341 {
343 (m_logger, "diagnostics::context::classify_diagnostics")
344 .log_param_option_id ("option_id", opt_id)
345 .log_param_kind ("new_kind", new_kind)
346 .log_param_location_t ("where", where);
347 logging::auto_inc_depth depth_sentinel (m_logger);
348
349 return m_option_classifier.classify_diagnostic (this,
350 opt_id,
351 new_kind,
352 where);
353 }
354
355 void push_diagnostics (location_t where)
356 {
358 (m_logger, "diagnostics::context::push_diagnostics")
359 .log_param_location_t ("where", where);
360 logging::auto_inc_depth depth_sentinel (m_logger);
361
362 m_option_classifier.push ();
363 }
364 void pop_diagnostics (location_t where)
365 {
367 (m_logger, "diagnostics::context::pop_diagnostics")
368 .log_param_location_t ("where", where);
369 logging::auto_inc_depth depth_sentinel (m_logger);
370
371 m_option_classifier.pop (where);
372 }
373
374 void maybe_show_locus (const rich_location &richloc,
375 const source_printing_options &opts,
376 enum kind diagnostic_kind,
377 pretty_printer &pp,
378 source_effect_info *effect_info);
379 void maybe_show_locus_as_html (const rich_location &richloc,
380 const source_printing_options &opts,
381 enum kind diagnostic_kind,
382 xml::printer &xp,
383 source_effect_info *effect_info,
384 html_label_writer *label_writer);
385
386 void emit_diagram (const diagram &diag);
387
388 /* Various setters for use by option-handling logic. */
389 void set_sink (std::unique_ptr<sink> sink_);
391
392 std::unique_ptr<client_data_hooks>
393 set_client_data_hooks (std::unique_ptr<client_data_hooks> hooks);
394
395 void push_owned_urlifier (std::unique_ptr<urlifier>);
396 void push_borrowed_urlifier (const urlifier &);
397 void pop_urlifier ();
398
401 {
403 }
404 void set_report_bug (bool val) { m_report_bug = val; }
409 void set_show_cwe (bool val) { m_show_cwe = val; }
410 void set_show_rules (bool val) { m_show_rules = val; }
411 void set_show_highlight_colors (bool val);
413 {
414 m_path_format = val;
415 }
416 void set_show_path_depths (bool val) { m_show_path_depths = val; }
418 void set_show_nesting (bool val);
419 void set_show_nesting_locations (bool val);
420 void set_show_nesting_levels (bool val);
421 void set_max_errors (int val) { m_max_errors = val; }
423 {
424 m_escape_format = val;
425 }
426
427 void set_format_decoder (printer_fn format_decoder);
429
430 /* Various accessors. */
432 {
434 }
435 bool show_path_depths_p () const { return m_show_path_depths; }
436 sink &get_sink (size_t idx) const;
439 {
440 return m_escape_format;
441 }
442
443 file_cache &
445 {
447 return *m_file_cache;
448 }
449
455 {
456 return m_client_data_hooks;
457 }
458
461
462 const urlifier *get_urlifier () const;
463
464 text_art::theme *get_diagram_theme () const { return m_diagrams.m_theme; }
465
467 {
468 return m_diagnostic_counters.m_count_for_kind[static_cast<size_t> (kind)];
469 }
470 int diagnostic_count (enum kind kind) const
471 {
472 return m_diagnostic_counters.get_count (kind);
473 }
474
475 /* Option-related member functions. */
476 inline bool option_enabled_p (option_id opt_id) const
477 {
478 if (!m_option_id_mgr)
479 return true;
480 return m_option_id_mgr->option_enabled_p (opt_id);
481 }
482
483 inline char *make_option_name (option_id opt_id,
484 enum kind orig_diag_kind,
485 enum kind diag_kind) const
486 {
487 if (!m_option_id_mgr)
488 return nullptr;
489 return m_option_id_mgr->make_option_name (opt_id,
490 orig_diag_kind,
491 diag_kind);
492 }
493
494 inline char *make_option_url (option_id opt_id) const
495 {
496 if (!m_option_id_mgr)
497 return nullptr;
498 return m_option_id_mgr->make_option_url (opt_id);
499 }
500
501 void
502 set_option_id_manager (std::unique_ptr<option_id_manager> option_id_mgr,
503 unsigned lang_mask);
504
505 unsigned get_lang_mask () const
506 {
507 return m_lang_mask;
508 }
509
510 bool diagnostic_impl (rich_location *, const metadata *,
511 option_id, const char *,
512 va_list *, enum kind) ATTRIBUTE_GCC_DIAG(5,0);
513 bool diagnostic_n_impl (rich_location *, const metadata *,
514 option_id, unsigned HOST_WIDE_INT,
515 const char *, const char *, va_list *,
516 enum kind) ATTRIBUTE_GCC_DIAG(7,0);
517
519 {
520 return m_diagnostic_groups.m_diagnostic_nesting_level;
521 }
522
523 char *build_indent_prefix () const;
524
525 int
526 pch_save (FILE *f)
527 {
528 return m_option_classifier.pch_save (f);
529 }
530
531 int
532 pch_restore (FILE *f)
533 {
534 return m_option_classifier.pch_restore (f);
535 }
536
537
540 {
541 return m_diagnostic_buffer;
542 }
545
546 std::unique_ptr<pretty_printer> clone_printer () const
547 {
548 return m_reference_printer->clone ();
549 }
550
555
556 void
557 add_sink (std::unique_ptr<sink>);
558
560
561 bool supports_fnotice_on_stderr_p () const;
562
563 /* Raise SIGABRT on any diagnostic of severity kind::error or higher. */
564 void
566 {
567 m_abort_on_error = val;
568 }
569
570 /* Accessor for use in serialization, e.g. by C++ modules. */
571 auto &
573 {
574 return m_option_classifier.m_classification_history;
575 }
576
577 void set_main_input_filename (const char *filename);
578
579 void
581 {
582 m_opt_permissive = opt_permissive;
583 }
584
585 void
586 set_fatal_errors (bool fatal_errors)
587 {
588 m_fatal_errors = fatal_errors;
589 }
590
591 void
593 const char *,
594 va_list *))
595 {
596 m_internal_error = cb;
597 }
598
599 void
602 {
604 }
605
606 void
608
616 {
617 return m_source_printing;
618 }
619
622
623 void set_caret_max_width (int value);
624
625private:
627
629
631
632 void check_max_errors (bool flush);
633 void action_after_output (enum kind diag_kind);
634
635 /* Data members.
636 Ideally, all of these would be private. */
637
638private:
639 /* A reference instance of pretty_printer created by the client
640 and owned by the context. Used for cloning when creating/adding
641 output formats.
642 Owned by the context; this would be a std::unique_ptr if
643 context had a proper ctor. */
645
646 /* Cache of source code.
647 Owned by the context; this would be a std::unique_ptr if
648 context had a proper ctor. */
650
651 /* The number of times we have issued diagnostics. */
653
654 /* True if it has been requested that warnings be treated as errors. */
656
657 /* The number of option indexes that can be passed to warning() et
658 al. */
660
661 /* The stack of sets of overridden diagnostic option severities. */
663
664 /* True if we should print any CWE identifiers associated with
665 diagnostics. */
667
668 /* True if we should print any rules associated with diagnostics. */
670
671 /* How should diagnostics::paths::path objects be printed. */
673
674 /* True if we should print stack depths when printing diagnostic paths. */
676
677 /* True if we should print the command line option which controls
678 each diagnostic, if known. */
680
681 /* True if we should raise a SIGABRT on errors. */
683
684public:
685 /* True if we should show the column number on diagnostics. */
687
688 /* True if pedwarns are errors. */
690
691 /* True if permerrors are warnings. */
693
694private:
695 /* The option to associate with turning permerrors into warnings,
696 if any. */
698
699 /* True if errors are fatal. */
701
702public:
703 /* True if all warnings should be disabled. */
705
706 /* True if warnings should be given in system headers. */
708
709private:
710 /* Maximum number of errors to report. */
712
713 /* Client-supplied callbacks for use in text output. */
714 struct {
715 /* This function is called before any message is printed out. It is
716 responsible for preparing message prefix and such. For example, it
717 might say:
718 In file included from "/usr/local/include/curses.h:5:
719 from "/home/gdr/src/nifty_printer.h:56:
720 ...
721 */
723
724 /* This function is called by diagnostic_show_locus in between
725 disjoint spans of source code, so that the context can print
726 something to indicate that a new span of source code has begun. */
729
730 /* This function is called after the diagnostic message is printed. */
733
734 /* Client hook to report an internal error. */
735 void (*m_internal_error) (context *, const char *, va_list *);
736
737 /* Client hook to adjust properties of the given diagnostic that we're
738 about to issue, such as its kind. */
740
741 /* Owned by the context; this would be a std::unique_ptr if
742 context had a proper ctor. */
744 unsigned m_lang_mask;
745
746 /* A stack of optional hooks for adding URLs to quoted text strings in
747 diagnostics. Only used for the main diagnostic message.
748 Typically a single one owner by the context, but can be temporarily
749 overridden by a borrowed urlifier (e.g. on-stack). */
756
757public:
758 /* Auxiliary data for client. */
760
761 /* Used to detect that the last caret was printed at the same location. */
762 location_t m_last_location;
763
764private:
766
768
771
772 /* True if -freport-bug option is used. */
774
775 /* Used to specify additional diagnostic output to be emitted after the
776 rest of the diagnostic. This is for implementing
777 -fdiagnostics-parseable-fixits and GCC_EXTRA_DIAGNOSTIC_OUTPUT. */
779
780 /* How should non-ASCII/non-printable bytes be escaped when
781 a diagnostic suggests escaping the source code on output. */
783
784 /* If non-NULL, a diagnostics::changes::change_set to which fix-it hints
785 should be applied, for generating patches.
786 Owned by the context; this would be a std::unique_ptr if
787 context had a proper ctor. */
789
790 /* Fields relating to diagnostic groups. */
791 struct {
792 /* How many diagnostic_group instances are currently alive. */
794
795 /* How many nesting levels have been pushed within this group. */
797
798 /* How many diagnostics have been emitted since the bottommost
799 diagnostic_group was pushed. */
801
802 /* The "group+diagnostic" nesting depth from which to inhibit notes. */
805
806 void inhibit_notes_in_group (bool inhibit = true);
807 bool notes_inhibited_in_group () const;
808
809 /* The various sinks to which diagnostics are to be outputted
810 (text vs structured formats such as SARIF).
811 The sinks are owned by the context; this would be a
812 std::vector<std::unique_ptr> if context had a
813 proper ctor. */
815
816 /* Callback to set the locations of call sites along the inlining
817 stack corresponding to a diagnostic location. Needed to traverse
818 the BLOCK_SUPERCONTEXT() chain hanging off the LOCATION_BLOCK()
819 of a diagnostic's location. */
821
822 /* A bundle of hooks for providing data to the context about its client
823 e.g. version information, plugins, etc.
824 Used by SARIF output to give metadata about the client that's
825 producing diagnostics.
826 Owned by the context; this would be a std::unique_ptr if
827 context had a proper ctor. */
829
830 /* Support for diagrams. */
831 struct
832 {
833 /* Theme to use when generating diagrams.
834 Can be NULL (if text art is disabled).
835 Owned by the context; this would be a std::unique_ptr if
836 context had a proper ctor. */
838
840
841 /* Owned by the context. */
843
844 /* Borrowed pointer to the active diagnostics::buffer, if any.
845 If null (the default), then diagnostics that are reported to the
846 context are immediately issued to the output format.
847 If non-null, then diagnostics that are reported to the context
848 are buffered in the buffer, and may be issued to the output format
849 later (if the buffer is flushed), moved to other buffers, or
850 discarded (if the buffer is cleared). */
852
853 /* Owned by the context.
854 Debugging option: if non-NULL, report information to the logger
855 on what the context is doing. */
857};
858
859/* Client supplied function to announce a diagnostic
860 (for text-based diagnostic output). */
861inline text_starter_fn &
866
867/* Client supplied function called between disjoint spans of source code,
868 so that the context can print
869 something to indicate that a new span of source code has begun. */
872{
874}
875
876/* Client supplied function called after a diagnostic message is
877 displayed (for text-based diagnostic output). */
878inline text_finalizer_fn &
883
884} // namespace diagnostics
885
886#endif /* ! GCC_DIAGNOSTICS_CONTEXT_H */
Definition vec.h:1667
Definition buffering.h:59
Definition changes.h:48
Definition client-data-hooks.h:35
Definition diagnostics/context.h:95
int get_tabstop() const
Definition diagnostics/context.h:105
file_cache & m_file_cache
Definition diagnostics/context.h:108
column_options m_column_options
Definition diagnostics/context.h:109
label_text get_location_text(const expanded_location &s, bool show_column, bool colorize) const
Definition diagnostics/context.cc:817
int converted_column(expanded_location s) const
Definition diagnostics/context.cc:809
column_policy(const context &dc)
Definition diagnostics/context.cc:799
Definition diagnostics/context.h:254
void set_report_bug(bool val)
Definition diagnostics/context.h:404
start_span_fn< to_text > m_text_start_span
Definition diagnostics/context.h:727
void set_main_input_filename(const char *filename)
Definition diagnostics/context.cc:526
pretty_printer * m_reference_printer
Definition diagnostics/context.h:644
bool diagnostic_impl(rich_location *, const metadata *, option_id, const char *, va_list *, enum kind) ATTRIBUTE_GCC_DIAG(5
Definition diagnostics/context.cc:1658
void set_show_nesting(bool val)
Definition diagnostics/context.cc:315
text_starter_fn m_begin_diagnostic
Definition diagnostics/context.h:722
void get_any_inlining_info(diagnostic_info *diagnostic)
Definition diagnostics/context.cc:1219
bool option_enabled_p(option_id opt_id) const
Definition diagnostics/context.h:476
set_locations_callback_t m_set_locations_cb
Definition diagnostics/context.h:820
bool m_abort_on_error
Definition diagnostics/context.h:682
void set_diagnostic_buffer(buffer *)
Definition buffering.cc:40
bool m_show_path_depths
Definition diagnostics/context.h:675
bool supports_fnotice_on_stderr_p() const
Definition diagnostics/context.cc:517
buffer * m_diagnostic_buffer
Definition diagnostics/context.h:851
void(* m_internal_error)(context *, const char *, va_list *)
Definition diagnostics/context.h:735
text_finalizer_fn m_end_diagnostic
Definition diagnostics/context.h:731
enum diagnostic_path_format m_path_format
Definition diagnostics/context.h:672
enum diagnostics_escape_format m_escape_format
Definition diagnostics/context.h:782
void refresh_output_sinks()
Definition diagnostics/context.cc:623
const client_data_hooks * get_client_data_hooks() const
Definition diagnostics/context.h:454
bool warning_enabled_at(location_t loc, option_id opt_id)
Definition diagnostics/context.cc:1295
int diagnostic_count(enum kind kind) const
Definition diagnostics/context.h:470
void * m_client_aux_data
Definition diagnostics/context.h:759
void flush_diagnostic_buffer(buffer &)
Definition buffering.cc:95
void maybe_show_locus(const rich_location &richloc, const source_printing_options &opts, enum kind diagnostic_kind, pretty_printer &pp, source_effect_info *effect_info)
Definition source-printing.cc:3859
bool m_warning_as_error_requested
Definition diagnostics/context.h:655
void DEBUG_FUNCTION dump() const
Definition diagnostics/context.h:281
int m_n_opts
Definition diagnostics/context.h:659
column_options m_column_options
Definition diagnostics/context.h:770
void finish()
Definition diagnostics/context.cc:353
struct diagnostics::context::@123301224134201270027146024344211261116312212300 m_text_callbacks
bool emit_diagnostic_with_group(enum kind kind, rich_location &richloc, const metadata *metadata, option_id opt_id, const char *gmsgid,...) ATTRIBUTE_GCC_DIAG(6
Definition diagnostics/context.cc:1313
option_id m_opt_permissive
Definition diagnostics/context.h:697
void pop_urlifier()
Definition diagnostics/context.cc:580
void set_option_id_manager(std::unique_ptr< option_id_manager > option_id_mgr, unsigned lang_mask)
Definition diagnostics/context.cc:555
const char *const * get_original_argv()
Definition diagnostics/context.h:288
std::unique_ptr< client_data_hooks > set_client_data_hooks(std::unique_ptr< client_data_hooks > hooks)
Definition diagnostics/context.cc:533
friend class text_sink
Definition diagnostics/context.h:266
friend start_span_fn< to_text > & start_span(context *dc)
Definition diagnostics/context.h:871
void set_show_cwe(bool val)
Definition diagnostics/context.h:409
changes::change_set * get_fixits_change_set() const
Definition diagnostics/context.h:450
counters m_diagnostic_counters
Definition diagnostics/context.h:652
text_art::theme * m_theme
Definition diagnostics/context.h:837
int pch_restore(FILE *f)
Definition diagnostics/context.h:532
unsigned m_lang_mask
Definition diagnostics/context.h:744
buffer * get_diagnostic_buffer() const
Definition diagnostics/context.h:539
void pop_nesting_level()
Definition diagnostics/context.cc:1855
void report_global_digraph(const lazily_created< digraphs::digraph > &)
Definition diagnostics/context.cc:1594
void set_escape_format(enum diagnostics_escape_format val)
Definition diagnostics/context.h:422
void push_diagnostics(location_t where)
Definition diagnostics/context.h:355
void set_nesting_level(int new_level)
Definition diagnostics/context.cc:1863
logging::logger * get_logger()
Definition diagnostics/context.h:283
void set_fatal_errors(bool fatal_errors)
Definition diagnostics/context.h:586
void remove_all_output_sinks()
Definition diagnostics/context.cc:481
void set_abort_on_error(bool val)
Definition diagnostics/context.h:565
bool m_permissive
Definition diagnostics/context.h:692
void(* m_adjust_diagnostic_info)(const context &, diagnostic_info *)
Definition diagnostics/context.h:739
void set_show_highlight_colors(bool val)
Definition diagnostics/context.cc:641
bool m_inhibit_notes_p
Definition diagnostics/context.h:767
void initialize_input_context(diagnostic_input_charset_callback ccb, bool should_skip_bom)
Definition diagnostics/context.cc:344
void end_group()
Definition diagnostics/context.cc:1827
void set_format_decoder(printer_fn format_decoder)
Definition diagnostics/context.cc:633
int m_group_nesting_depth
Definition diagnostics/context.h:793
int m_emission_count
Definition diagnostics/context.h:800
file_cache * m_file_cache
Definition diagnostics/context.h:649
bool m_show_rules
Definition diagnostics/context.h:669
client_data_hooks * m_client_data_hooks
Definition diagnostics/context.h:828
void inhibit_notes()
Definition diagnostics/context.h:607
bool bool diagnostic_n_impl(rich_location *, const metadata *, option_id, unsigned HOST_WIDE_INT, const char *, const char *, va_list *, enum kind) ATTRIBUTE_GCC_DIAG(7
Definition diagnostics/context.cc:1698
friend text_finalizer_fn & text_finalizer(context *dc)
Definition diagnostics/context.h:879
bool notes_inhibited_in_group() const
Definition diagnostics/context.cc:1093
int m_diagnostic_nesting_level
Definition diagnostics/context.h:796
int & diagnostic_count(enum kind kind)
Definition diagnostics/context.h:466
void clear_diagnostic_buffer(buffer &)
Definition buffering.cc:79
bool show_path_depths_p() const
Definition diagnostics/context.h:435
int m_max_errors
Definition diagnostics/context.h:711
void set_adjust_diagnostic_info_callback(void(*cb)(const context &, diagnostic_info *))
Definition diagnostics/context.h:600
unsigned get_lang_mask() const
Definition diagnostics/context.h:505
const logical_locations::manager * get_logical_location_manager() const
Definition diagnostics/context.cc:591
void set_set_locations_callback(set_locations_callback_t cb)
Definition diagnostics/context.h:293
bool m_show_column
Definition diagnostics/context.h:686
auto_vec< urlifier_stack_node > * m_urlifier_stack
Definition diagnostics/context.h:755
bool m_warn_system_headers
Definition diagnostics/context.h:707
const column_options & get_column_options() const
Definition diagnostics/context.h:621
pretty_printer * get_reference_printer() const
Definition diagnostics/context.h:551
void color_init(int value)
Definition diagnostics/context.cc:255
char ** m_original_argv
Definition diagnostics/context.h:842
void report_verbatim(text_info &)
Definition diagnostics/context.cc:1580
void set_prefixing_rule(diagnostic_prefixing_rule_t rule)
Definition diagnostics/context.cc:650
void set_warning_as_error_requested(bool val)
Definition diagnostics/context.h:400
source_printing_options & get_source_printing_options()
Definition diagnostics/context.h:610
void set_extra_output_kind(enum diagnostics_extra_output_kind kind)
Definition diagnostics/context.h:405
void set_show_path_depths(bool val)
Definition diagnostics/context.h:416
start_span_fn< to_html > m_html_start_span
Definition diagnostics/context.h:728
void set_show_option_requested(bool val)
Definition diagnostics/context.h:417
void(* set_locations_callback_t)(const context &, diagnostic_info *)
Definition diagnostics/context.h:269
void push_borrowed_urlifier(const urlifier &)
Definition diagnostics/context.cc:572
location_t m_last_location
Definition diagnostics/context.h:762
option_classifier m_option_classifier
Definition diagnostics/context.h:662
char * build_indent_prefix() const
void set_original_argv(unique_argv original_argv)
Definition diagnostics/context.cc:542
option_id_manager * m_option_id_mgr
Definition diagnostics/context.h:743
bool bool bool report_diagnostic(diagnostic_info *)
Definition diagnostics/context.cc:1358
std::unique_ptr< pretty_printer > clone_printer() const
Definition diagnostics/context.h:546
void initialize(int n_opts)
Definition diagnostics/context.cc:138
friend class source_print_policy
Definition diagnostics/context.h:265
void set_internal_error_callback(void(*cb)(context *, const char *, va_list *))
Definition diagnostics/context.h:592
enum kind classify_diagnostic(option_id opt_id, enum kind new_kind, location_t where)
Definition diagnostics/context.h:338
void push_nesting_level()
Definition diagnostics/context.cc:1849
void set_max_errors(int val)
Definition diagnostics/context.h:421
char * make_option_name(option_id opt_id, enum kind orig_diag_kind, enum kind diag_kind) const
Definition diagnostics/context.h:483
void push_owned_urlifier(std::unique_ptr< urlifier >)
Definition diagnostics/context.cc:564
friend text_starter_fn & text_starter(context *dc)
Definition diagnostics/context.h:862
bool execution_failed_p() const
Definition diagnostics/context.cc:472
void add_sink(std::unique_ptr< sink >)
Definition diagnostics/context.cc:506
void pop_diagnostics(location_t where)
Definition diagnostics/context.h:364
file_cache & get_file_cache() const
Definition diagnostics/context.h:444
int m_lock
Definition diagnostics/context.h:765
bool m_fatal_errors
Definition diagnostics/context.h:700
void inhibit_notes_in_group(bool inhibit=true)
Definition diagnostics/context.cc:1063
void action_after_output(enum kind diag_kind)
Definition diagnostics/context.cc:979
void initialize_fixits_change_set()
Definition diagnostics/context.cc:659
bool warning_as_error_requested_p() const
Definition diagnostics/context.h:431
struct diagnostics::context::@341201264073143215367363357234376160363014117137 m_diagnostic_groups
text_art::theme * get_diagram_theme() const
Definition diagnostics/context.h:464
logging::logger * m_logger
Definition diagnostics/context.h:856
bool option_unspecified_p(option_id opt_id) const
Definition diagnostics/context.h:311
void set_permissive_option(option_id opt_permissive)
Definition diagnostics/context.h:580
void emit_diagram(const diagram &diag)
Definition diagnostics/context.cc:1740
bool bool int get_diagnostic_nesting_level() const
Definition diagnostics/context.h:518
struct diagnostics::context::@315143341136332350101266143205316065242223315254 m_diagrams
char * make_option_url(option_id opt_id) const
Definition diagnostics/context.h:494
bool m_inhibit_warnings
Definition diagnostics/context.h:704
bool m_report_bug
Definition diagnostics/context.h:773
enum diagnostic_path_format get_path_format() const
Definition diagnostics/context.h:437
void set_pretty_printer(std::unique_ptr< pretty_printer > pp)
Definition diagnostics/context.cc:613
const source_printing_options & get_source_printing_options() const
Definition diagnostics/context.h:615
void set_caret_max_width(int value)
Definition diagnostics/context.cc:122
int pch_save(FILE *f)
Definition diagnostics/context.h:526
source_printing_options m_source_printing
Definition diagnostics/context.h:769
const urlifier * get_urlifier() const
Definition diagnostics/context.cc:599
void set_sink(std::unique_ptr< sink > sink_)
Definition diagnostics/context.cc:488
enum diagnostics_extra_output_kind m_extra_output_kind
Definition diagnostics/context.h:778
void error_recursion() ATTRIBUTE_NORETURN
Definition diagnostics/context.cc:1755
void begin_group()
Definition diagnostics/context.cc:1821
bool m_pedantic_errors
Definition diagnostics/context.h:689
void check_max_errors(bool flush)
Definition diagnostics/context.cc:955
void maybe_show_locus_as_html(const rich_location &richloc, const source_printing_options &opts, enum kind diagnostic_kind, xml::printer &xp, source_effect_info *effect_info, html_label_writer *label_writer)
Definition source-printing.cc:3892
int m_inhibiting_notes_from
Definition diagnostics/context.h:803
column_options & get_column_options()
Definition diagnostics/context.h:620
bool m_show_cwe
Definition diagnostics/context.h:666
auto_vec< sink * > m_sinks
Definition diagnostics/context.h:814
void set_show_rules(bool val)
Definition diagnostics/context.h:410
sink & get_sink(size_t idx) const
Definition diagnostics/context.cc:498
void set_show_nesting_locations(bool val)
Definition diagnostics/context.cc:324
auto & get_classification_history()
Definition diagnostics/context.h:572
changes::change_set * m_fixits_change_set
Definition diagnostics/context.h:788
void urls_init(int value)
Definition diagnostics/context.cc:286
void set_text_art_charset(enum diagnostic_text_art_charset charset)
Definition diagnostics/context.cc:1936
void set_path_format(enum diagnostic_path_format val)
Definition diagnostics/context.h:412
bool m_show_option_requested
Definition diagnostics/context.h:679
bool bool emit_diagnostic_with_group_va(enum kind kind, rich_location &richloc, const metadata *metadata, option_id opt_id, const char *gmsgid, va_list *ap) ATTRIBUTE_GCC_DIAG(6
Definition diagnostics/context.cc:1335
bool diagnostic_enabled(diagnostic_info *diagnostic)
Definition diagnostics/context.cc:1251
enum diagnostics_escape_format get_escape_format() const
Definition diagnostics/context.h:438
friend class buffer
Definition diagnostics/context.h:267
void set_show_nesting_levels(bool val)
Definition diagnostics/context.cc:333
Definition diagram.h:35
Definition diagnostics/digraphs.h:123
Definition file-cache.h:82
Definition diagnostics/context.h:146
virtual ~html_label_writer()
Definition diagnostics/context.h:148
Definition diagnostics/context.h:117
bool show_column_p() const
Definition diagnostics/context.h:122
void print_text_span_start(const context &dc, pretty_printer &pp, const expanded_location &exploc)
Definition source-printing.cc:692
column_policy m_column_policy
Definition diagnostics/context.h:138
bool m_show_column
Definition diagnostics/context.h:139
location_print_policy(const context &dc)
Definition diagnostics/context.cc:839
const column_policy & get_column_policy() const
Definition diagnostics/context.h:125
void print_html_span_start(const context &dc, xml::printer &xp, const expanded_location &exploc)
Definition source-printing.cc:703
log_function_params & log_param_location_t(const char *name, location_t value)
Definition logging.h:123
log_function_params & log_param_option_id(const char *name, diagnostics::option_id value)
Definition logging.h:149
log_function_params & log_param_kind(const char *name, enum diagnostics::kind value)
Definition logging.h:160
Definition logging.h:38
Definition logical-locations.h:147
Definition metadata.h:41
Definition option-classifier.h:37
Definition option-id-manager.h:29
Definition sink.h:36
Definition source-printing-effects.h:43
Definition diagnostics/context.h:158
location_print_policy m_location_policy
Definition diagnostics/context.h:210
void print_as_html(xml::printer &xp, const rich_location &richloc, enum kind diagnostic_kind, source_effect_info *effect_info, html_label_writer *label_writer) const
Definition source-printing.cc:3970
start_span_fn< to_html > m_html_start_span_cb
Definition diagnostics/context.h:212
const location_print_policy & get_location_policy() const
Definition diagnostics/context.h:203
file_cache & m_file_cache
Definition diagnostics/context.h:213
start_span_fn< to_text > get_text_start_span_fn() const
Definition diagnostics/context.h:181
text_art::theme * get_diagram_theme() const
Definition diagnostics/context.h:196
enum diagnostics_escape_format m_escape_format
Definition diagnostics/context.h:217
const column_policy & get_column_policy() const
Definition diagnostics/context.h:198
const source_printing_options & m_options
Definition diagnostics/context.h:209
start_span_fn< to_text > m_text_start_span_cb
Definition diagnostics/context.h:211
source_print_policy(const context &)
Definition source-printing.cc:3924
enum diagnostics_escape_format get_escape_format() const
Definition diagnostics/context.h:190
const source_printing_options & get_options() const
Definition diagnostics/context.h:178
void print(pretty_printer &pp, const rich_location &richloc, enum kind diagnostic_kind, source_effect_info *effect_info) const
Definition source-printing.cc:3953
file_cache & get_file_cache() const
Definition diagnostics/context.h:187
start_span_fn< to_html > get_html_start_span_fn() const
Definition diagnostics/context.h:184
text_art::theme * m_diagram_theme
Definition diagnostics/context.h:216
Definition text-sink.h:35
Definition digraph.h:121
Definition lazily-created.h:31
Definition pretty-print.h:241
Definition theme.h:30
Definition pretty-print-urlifier.h:27
Definition xml-printer.h:33
diagnostics_escape_format
Definition context-options.h:41
diagnostic_text_art_charset
Definition context-options.h:101
diagnostic_path_format
Definition context-options.h:67
diagnostics_extra_output_kind
Definition context-options.h:86
const char *(* diagnostic_input_charset_callback)(const char *)
Definition coretypes.h:175
void ATTRIBUTE_NORETURN
Definition diagnostic-core.h:76
#define ATTRIBUTE_GCC_DIAG(m, n)
Definition diagnostic-core.h:71
Definition changes.cc:31
Definition diagnostics/context.h:39
Definition diagnostics/context.h:41
Definition cfghooks.h:26
pretty_printer * get_printer(to_text &)
Definition source-printing.cc:713
text_starter_fn & text_starter(context *dc)
Definition diagnostics/context.h:862
start_span_fn< to_text > & start_span(context *dc)
Definition diagnostics/context.h:871
text_finalizer_fn & text_finalizer(context *dc)
Definition diagnostics/context.h:879
void(* text_finalizer_fn)(text_sink &, const diagnostic_info *, enum kind)
Definition diagnostics/context.h:86
void(* text_starter_fn)(text_sink &, const diagnostic_info *)
Definition diagnostics/context.h:73
void(*)(const location_print_policy &, TextOrHtml &text_or_html, expanded_location) start_span_fn
Definition diagnostics/context.h:82
kind
Definition kinds.h:27
Definition diagnostics/context.h:57
Definition graphviz.h:26
bool(* printer_fn)(pretty_printer *, text_info *, const char *, int, bool, bool, bool, bool *, pp_token_list &)
Definition pretty-print.h:190
diagnostic_prefixing_rule_t
Definition pretty-print.h:66
static void const char va_list ap
Definition read-md.cc:205
Definition libgdiagnostics.cc:1240
Definition column-options.h:28
Definition diagnostics/context.h:751
bool m_owned
Definition diagnostics/context.h:753
urlifier * m_urlifier
Definition diagnostics/context.h:752
Definition counters.h:32
Definition diagnostic-info.h:32
Definition option-id.h:32
Definition source-printing-options.h:31
Definition source-printing.cc:545
Definition source-printing.cc:409
Definition pretty-print.h:34
Definition unique-argv.h:28
#define gcc_assert(EXPR)
Definition system.h:817
#define DEBUG_FUNCTION
Definition system.h:1191