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 subsystem
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 {
318 return m_lock > 0;
319 }
320
322 rich_location &richloc,
323 const metadata *metadata,
324 option_id opt_id,
325 const char *gmsgid, ...)
328 rich_location &richloc,
329 const metadata *metadata,
330 option_id opt_id,
331 const char *gmsgid, va_list *ap)
333
335 void report_verbatim (text_info &);
336
337 /* Report a directed graph associated with the run as a whole
338 to any sinks that support directed graphs. */
339 void
341
342 void
344 enum kind new_kind,
345 location_t where)
346 {
348 (m_logger, "diagnostics::context::classify_diagnostics")
349 .log_param_option_id ("option_id", opt_id)
350 .log_param_kind ("new_kind", new_kind)
351 .log_param_location_t ("where", where);
352 logging::auto_inc_depth depth_sentinel (m_logger);
353
354 m_option_classifier.classify_diagnostic (this, opt_id, new_kind, where);
355 }
356
357 void push_diagnostics (location_t where)
358 {
360 (m_logger, "diagnostics::context::push_diagnostics")
361 .log_param_location_t ("where", where);
362 logging::auto_inc_depth depth_sentinel (m_logger);
363
364 m_option_classifier.push ();
365 }
366 void pop_diagnostics (location_t where)
367 {
369 (m_logger, "diagnostics::context::pop_diagnostics")
370 .log_param_location_t ("where", where);
371 logging::auto_inc_depth depth_sentinel (m_logger);
372
373 m_option_classifier.pop (where);
374 }
375
376 void maybe_show_locus (const rich_location &richloc,
377 const source_printing_options &opts,
378 enum kind diagnostic_kind,
379 pretty_printer &pp,
380 source_effect_info *effect_info);
381 void maybe_show_locus_as_html (const rich_location &richloc,
382 const source_printing_options &opts,
383 enum kind diagnostic_kind,
384 xml::printer &xp,
385 source_effect_info *effect_info,
386 html_label_writer *label_writer);
387
388 void emit_diagram (const diagram &diag);
389
390 /* Various setters for use by option-handling logic. */
391 void set_sink (std::unique_ptr<sink> sink_);
393
394 std::unique_ptr<client_data_hooks>
395 set_client_data_hooks (std::unique_ptr<client_data_hooks> hooks);
396
397 void push_owned_urlifier (std::unique_ptr<urlifier>);
398 void push_borrowed_urlifier (const urlifier &);
399 void pop_urlifier ();
400
403 {
405 }
406 void set_report_bug (bool val) { m_report_bug = val; }
411 void set_show_cwe (bool val) { m_show_cwe = val; }
412 void set_show_rules (bool val) { m_show_rules = val; }
413 void set_show_highlight_colors (bool val);
415 {
416 m_path_format = val;
417 }
418 void set_show_path_depths (bool val) { m_show_path_depths = val; }
420 void set_show_nesting (bool val);
421 void set_show_nesting_locations (bool val);
422 void set_show_nesting_levels (bool val);
423 void set_max_errors (int val) { m_max_errors = val; }
425 {
426 m_escape_format = val;
427 }
428
429 void set_format_decoder (printer_fn format_decoder);
431
432 /* Various accessors. */
434 {
436 }
437 bool show_path_depths_p () const { return m_show_path_depths; }
438 sink &get_sink (size_t idx) const;
441 {
442 return m_escape_format;
443 }
444
445 file_cache &
447 {
449 return *m_file_cache;
450 }
451
457 {
458 return m_client_data_hooks;
459 }
460
463
464 const urlifier *get_urlifier () const;
465
466 text_art::theme *get_diagram_theme () const { return m_diagrams.m_theme; }
467
469 {
470 return m_diagnostic_counters.m_count_for_kind[static_cast<size_t> (kind)];
471 }
472 int diagnostic_count (enum kind kind) const
473 {
474 return m_diagnostic_counters.get_count (kind);
475 }
476
477 /* Option-related member functions. */
478 inline bool option_enabled_p (option_id opt_id) const
479 {
480 if (!m_option_id_mgr)
481 return true;
482 return m_option_id_mgr->option_enabled_p (opt_id);
483 }
484
485 inline label_text get_option_name (option_id opt_id,
486 enum kind orig_diag_kind,
487 enum kind diag_kind) const
488 {
489 if (!m_option_id_mgr)
490 return label_text ();
491 return m_option_id_mgr->get_option_name (opt_id,
492 orig_diag_kind,
493 diag_kind);
494 }
495
496 inline label_text get_option_url (option_id opt_id) const
497 {
498 if (!m_option_id_mgr)
499 return label_text ();
500 return m_option_id_mgr->get_option_url (opt_id);
501 }
502
503 void
504 set_option_id_manager (std::unique_ptr<option_id_manager> option_id_mgr,
505 unsigned lang_mask);
506
507 unsigned get_lang_mask () const
508 {
509 return m_lang_mask;
510 }
511
512 bool diagnostic_impl (rich_location *, const metadata *,
513 option_id, const char *,
514 va_list *, enum kind) ATTRIBUTE_GCC_DIAG(5,0);
515 bool diagnostic_n_impl (rich_location *, const metadata *,
516 option_id, unsigned HOST_WIDE_INT,
517 const char *, const char *, va_list *,
518 enum kind) ATTRIBUTE_GCC_DIAG(7,0);
519
521 {
522 return m_diagnostic_groups.m_diagnostic_nesting_level;
523 }
524
525 char *build_indent_prefix () const;
526
527 int
528 pch_save (FILE *f)
529 {
530 return m_option_classifier.pch_save (f);
531 }
532
533 int
534 pch_restore (FILE *f)
535 {
536 return m_option_classifier.pch_restore (f);
537 }
538
539
542 {
543 return m_diagnostic_buffer;
544 }
547
548 std::unique_ptr<pretty_printer> clone_printer () const
549 {
550 return m_reference_printer->clone ();
551 }
552
557
558 void
559 add_sink (std::unique_ptr<sink>);
560
562
563 bool supports_fnotice_on_stderr_p () const;
564
565 /* Raise SIGABRT on any diagnostic of severity kind::error or higher. */
566 void
568 {
569 m_abort_on_error = val;
570 }
571
572 /* Accessor for use in serialization, e.g. by C++ modules. */
573 auto &
575 {
576 return m_option_classifier.m_classification_history;
577 }
578
579 void set_main_input_filename (const char *filename);
580
581 void
583 {
584 m_opt_permissive = opt_permissive;
585 }
586
587 void
588 set_fatal_errors (bool fatal_errors)
589 {
590 m_fatal_errors = fatal_errors;
591 }
592
593 void
595 const char *,
596 va_list *))
597 {
598 m_internal_error = cb;
599 }
600
601 void
604 {
606 }
607
608 void
610
618 {
619 return m_source_printing;
620 }
621
624
625 void set_caret_max_width (int value);
626
627private:
629
631
633
634 void check_max_errors (bool flush);
635 void action_after_output (enum kind diag_kind);
636
637 /* Data members.
638 Ideally, all of these would be private. */
639
640private:
641 /* A reference instance of pretty_printer created by the client
642 and owned by the context. Used for cloning when creating/adding
643 output formats.
644 Owned by the context; this would be a std::unique_ptr if
645 context had a proper ctor. */
647
648 /* Cache of source code.
649 Owned by the context; this would be a std::unique_ptr if
650 context had a proper ctor. */
652
653 /* The number of times we have issued diagnostics. */
655
656 /* True if it has been requested that warnings be treated as errors. */
658
659 /* The number of option indexes that can be passed to warning() et
660 al. */
662
663 /* The stack of sets of overridden diagnostic option severities. */
665
666 /* True if we should print any CWE identifiers associated with
667 diagnostics. */
669
670 /* True if we should print any rules associated with diagnostics. */
672
673 /* How should diagnostics::paths::path objects be printed. */
675
676 /* True if we should print stack depths when printing diagnostic paths. */
678
679 /* True if we should print the command line option which controls
680 each diagnostic, if known. */
682
683 /* True if we should raise a SIGABRT on errors. */
685
686public:
687 /* True if we should show the column number on diagnostics. */
689
690 /* True if pedwarns are errors. */
692
693 /* True if permerrors are warnings. */
695
696private:
697 /* The option to associate with turning permerrors into warnings,
698 if any. */
700
701 /* True if errors are fatal. */
703
704public:
705 /* True if all warnings should be disabled. */
707
708 /* True if warnings should be given in system headers. */
710
711private:
712 /* Maximum number of errors to report. */
714
715 /* Client-supplied callbacks for use in text output. */
716 struct {
717 /* This function is called before any message is printed out. It is
718 responsible for preparing message prefix and such. For example, it
719 might say:
720 In file included from "/usr/local/include/curses.h:5:
721 from "/home/gdr/src/nifty_printer.h:56:
722 ...
723 */
725
726 /* This function is called by diagnostic_show_locus in between
727 disjoint spans of source code, so that the context can print
728 something to indicate that a new span of source code has begun. */
731
732 /* This function is called after the diagnostic message is printed. */
735
736 /* Client hook to report an internal error. */
737 void (*m_internal_error) (context *, const char *, va_list *);
738
739 /* Client hook to adjust properties of the given diagnostic that we're
740 about to issue, such as its kind. */
742
743 /* Owned by the context; this would be a std::unique_ptr if
744 context had a proper ctor. */
746 unsigned m_lang_mask;
747
748 /* A stack of optional hooks for adding URLs to quoted text strings in
749 diagnostics. Only used for the main diagnostic message.
750 Typically a single one owner by the context, but can be temporarily
751 overridden by a borrowed urlifier (e.g. on-stack). */
758
759public:
760 /* Auxiliary data for client. */
762
763 /* Used to detect that the last caret was printed at the same location. */
764 location_t m_last_location;
765
766private:
768
770
773
774 /* True if -freport-bug option is used. */
776
777 /* Used to specify additional diagnostic output to be emitted after the
778 rest of the diagnostic. This is for implementing
779 -fdiagnostics-parseable-fixits and GCC_EXTRA_DIAGNOSTIC_OUTPUT. */
781
782 /* How should non-ASCII/non-printable bytes be escaped when
783 a diagnostic suggests escaping the source code on output. */
785
786 /* If non-NULL, a diagnostics::changes::change_set to which fix-it hints
787 should be applied, for generating patches.
788 Owned by the context; this would be a std::unique_ptr if
789 context had a proper ctor. */
791
792 /* Fields relating to diagnostic groups. */
793 struct {
794 /* How many diagnostic_group instances are currently alive. */
796
797 /* How many nesting levels have been pushed within this group. */
799
800 /* How many diagnostics have been emitted since the bottommost
801 diagnostic_group was pushed. */
803
804 /* The "group+diagnostic" nesting depth from which to inhibit notes. */
807
808 void inhibit_notes_in_group (bool inhibit = true);
809 bool notes_inhibited_in_group () const;
810
811 /* The various sinks to which diagnostics are to be outputted
812 (text vs structured formats such as SARIF).
813 The sinks are owned by the context; this would be a
814 std::vector<std::unique_ptr> if context had a
815 proper ctor. */
817
818 /* Callback to set the locations of call sites along the inlining
819 stack corresponding to a diagnostic location. Needed to traverse
820 the BLOCK_SUPERCONTEXT() chain hanging off the LOCATION_BLOCK()
821 of a diagnostic's location. */
823
824 /* A bundle of hooks for providing data to the context about its client
825 e.g. version information, plugins, etc.
826 Used by SARIF output to give metadata about the client that's
827 producing diagnostics.
828 Owned by the context; this would be a std::unique_ptr if
829 context had a proper ctor. */
831
832 /* Support for diagrams. */
833 struct
834 {
835 /* Theme to use when generating diagrams.
836 Can be NULL (if text art is disabled).
837 Owned by the context; this would be a std::unique_ptr if
838 context had a proper ctor. */
840
842
843 /* Owned by the context. */
845
846 /* Borrowed pointer to the active diagnostics::buffer, if any.
847 If null (the default), then diagnostics that are reported to the
848 context are immediately issued to the output format.
849 If non-null, then diagnostics that are reported to the context
850 are buffered in the buffer, and may be issued to the output format
851 later (if the buffer is flushed), moved to other buffers, or
852 discarded (if the buffer is cleared). */
854
855 /* Owned by the context.
856 Debugging option: if non-NULL, report information to the logger
857 on what the context is doing. */
859};
860
861/* Client supplied function to announce a diagnostic
862 (for text-based diagnostic output). */
863inline text_starter_fn &
868
869/* Client supplied function called between disjoint spans of source code,
870 so that the context can print
871 something to indicate that a new span of source code has begun. */
874{
876}
877
878/* Client supplied function called after a diagnostic message is
879 displayed (for text-based diagnostic output). */
880inline text_finalizer_fn &
885
886} // namespace diagnostics
887
888#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:406
start_span_fn< to_text > m_text_start_span
Definition diagnostics/context.h:729
void set_main_input_filename(const char *filename)
Definition diagnostics/context.cc:526
pretty_printer * m_reference_printer
Definition diagnostics/context.h:646
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:724
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:478
set_locations_callback_t m_set_locations_cb
Definition diagnostics/context.h:822
bool m_abort_on_error
Definition diagnostics/context.h:684
void set_diagnostic_buffer(buffer *)
Definition buffering.cc:40
bool m_show_path_depths
Definition diagnostics/context.h:677
bool supports_fnotice_on_stderr_p() const
Definition diagnostics/context.cc:517
buffer * m_diagnostic_buffer
Definition diagnostics/context.h:853
void(* m_internal_error)(context *, const char *, va_list *)
Definition diagnostics/context.h:737
text_finalizer_fn m_end_diagnostic
Definition diagnostics/context.h:733
enum diagnostic_path_format m_path_format
Definition diagnostics/context.h:674
enum diagnostics_escape_format m_escape_format
Definition diagnostics/context.h:784
void refresh_output_sinks()
Definition diagnostics/context.cc:623
const client_data_hooks * get_client_data_hooks() const
Definition diagnostics/context.h:456
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:472
void * m_client_aux_data
Definition diagnostics/context.h:761
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:657
bool emitting_diagnostic_p() const
Definition diagnostics/context.h:316
void DEBUG_FUNCTION dump() const
Definition diagnostics/context.h:281
int m_n_opts
Definition diagnostics/context.h:661
column_options m_column_options
Definition diagnostics/context.h:772
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:699
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:873
void set_show_cwe(bool val)
Definition diagnostics/context.h:411
changes::change_set * get_fixits_change_set() const
Definition diagnostics/context.h:452
counters m_diagnostic_counters
Definition diagnostics/context.h:654
text_art::theme * m_theme
Definition diagnostics/context.h:839
int pch_restore(FILE *f)
Definition diagnostics/context.h:534
unsigned m_lang_mask
Definition diagnostics/context.h:746
buffer * get_diagnostic_buffer() const
Definition diagnostics/context.h:541
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:424
void push_diagnostics(location_t where)
Definition diagnostics/context.h:357
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:588
void remove_all_output_sinks()
Definition diagnostics/context.cc:481
void set_abort_on_error(bool val)
Definition diagnostics/context.h:567
bool m_permissive
Definition diagnostics/context.h:694
void(* m_adjust_diagnostic_info)(const context &, diagnostic_info *)
Definition diagnostics/context.h:741
void set_show_highlight_colors(bool val)
Definition diagnostics/context.cc:641
bool m_inhibit_notes_p
Definition diagnostics/context.h:769
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:795
int m_emission_count
Definition diagnostics/context.h:802
file_cache * m_file_cache
Definition diagnostics/context.h:651
bool m_show_rules
Definition diagnostics/context.h:671
client_data_hooks * m_client_data_hooks
Definition diagnostics/context.h:830
void inhibit_notes()
Definition diagnostics/context.h:609
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
label_text get_option_url(option_id opt_id) const
Definition diagnostics/context.h:496
friend text_finalizer_fn & text_finalizer(context *dc)
Definition diagnostics/context.h:881
bool notes_inhibited_in_group() const
Definition diagnostics/context.cc:1093
int m_diagnostic_nesting_level
Definition diagnostics/context.h:798
int & diagnostic_count(enum kind kind)
Definition diagnostics/context.h:468
void clear_diagnostic_buffer(buffer &)
Definition buffering.cc:79
bool show_path_depths_p() const
Definition diagnostics/context.h:437
int m_max_errors
Definition diagnostics/context.h:713
void set_adjust_diagnostic_info_callback(void(*cb)(const context &, diagnostic_info *))
Definition diagnostics/context.h:602
unsigned get_lang_mask() const
Definition diagnostics/context.h:507
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:688
auto_vec< urlifier_stack_node > * m_urlifier_stack
Definition diagnostics/context.h:757
bool m_warn_system_headers
Definition diagnostics/context.h:709
const column_options & get_column_options() const
Definition diagnostics/context.h:623
pretty_printer * get_reference_printer() const
Definition diagnostics/context.h:553
void color_init(int value)
Definition diagnostics/context.cc:255
char ** m_original_argv
Definition diagnostics/context.h:844
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:402
source_printing_options & get_source_printing_options()
Definition diagnostics/context.h:612
void set_extra_output_kind(enum diagnostics_extra_output_kind kind)
Definition diagnostics/context.h:407
void set_show_path_depths(bool val)
Definition diagnostics/context.h:418
start_span_fn< to_html > m_html_start_span
Definition diagnostics/context.h:730
void set_show_option_requested(bool val)
Definition diagnostics/context.h:419
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:764
option_classifier m_option_classifier
Definition diagnostics/context.h:664
char * build_indent_prefix() const
void set_original_argv(unique_argv original_argv)
Definition diagnostics/context.cc:542
void classify_diagnostic(option_id opt_id, enum kind new_kind, location_t where)
Definition diagnostics/context.h:343
option_id_manager * m_option_id_mgr
Definition diagnostics/context.h:745
bool bool bool report_diagnostic(diagnostic_info *)
Definition diagnostics/context.cc:1358
std::unique_ptr< pretty_printer > clone_printer() const
Definition diagnostics/context.h:548
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:594
void push_nesting_level()
Definition diagnostics/context.cc:1849
void set_max_errors(int val)
Definition diagnostics/context.h:423
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:864
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:366
file_cache & get_file_cache() const
Definition diagnostics/context.h:446
int m_lock
Definition diagnostics/context.h:767
bool m_fatal_errors
Definition diagnostics/context.h:702
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:433
struct diagnostics::context::@341201264073143215367363357234376160363014117137 m_diagnostic_groups
text_art::theme * get_diagram_theme() const
Definition diagnostics/context.h:466
logging::logger * m_logger
Definition diagnostics/context.h:858
bool option_unspecified_p(option_id opt_id) const
Definition diagnostics/context.h:311
label_text get_option_name(option_id opt_id, enum kind orig_diag_kind, enum kind diag_kind) const
Definition diagnostics/context.h:485
void set_permissive_option(option_id opt_permissive)
Definition diagnostics/context.h:582
void emit_diagram(const diagram &diag)
Definition diagnostics/context.cc:1740
bool bool int get_diagnostic_nesting_level() const
Definition diagnostics/context.h:520
struct diagnostics::context::@315143341136332350101266143205316065242223315254 m_diagrams
bool m_inhibit_warnings
Definition diagnostics/context.h:706
bool m_report_bug
Definition diagnostics/context.h:775
enum diagnostic_path_format get_path_format() const
Definition diagnostics/context.h:439
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:617
void set_caret_max_width(int value)
Definition diagnostics/context.cc:122
int pch_save(FILE *f)
Definition diagnostics/context.h:528
source_printing_options m_source_printing
Definition diagnostics/context.h:771
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:780
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:691
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:805
column_options & get_column_options()
Definition diagnostics/context.h:622
bool m_show_cwe
Definition diagnostics/context.h:668
auto_vec< sink * > m_sinks
Definition diagnostics/context.h:816
void set_show_rules(bool val)
Definition diagnostics/context.h:412
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:574
changes::change_set * m_fixits_change_set
Definition diagnostics/context.h:790
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:414
bool m_show_option_requested
Definition diagnostics/context.h:681
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:440
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:178
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:864
start_span_fn< to_text > & start_span(context *dc)
Definition diagnostics/context.h:873
text_finalizer_fn & text_finalizer(context *dc)
Definition diagnostics/context.h:881
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 analyzer-logging.h:28
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:1131
Definition column-options.h:28
Definition diagnostics/context.h:753
bool m_owned
Definition diagnostics/context.h:755
urlifier * m_urlifier
Definition diagnostics/context.h:754
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:820
#define DEBUG_FUNCTION
Definition system.h:1192