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-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 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 void set_client_data_hooks (std::unique_ptr<client_data_hooks> hooks);
392
393 void push_owned_urlifier (std::unique_ptr<urlifier>);
394 void push_borrowed_urlifier (const urlifier &);
395 void pop_urlifier ();
396
399 {
401 }
402 void set_report_bug (bool val) { m_report_bug = val; }
407 void set_show_cwe (bool val) { m_show_cwe = val; }
408 void set_show_rules (bool val) { m_show_rules = val; }
409 void set_show_highlight_colors (bool val);
411 {
412 m_path_format = val;
413 }
414 void set_show_path_depths (bool val) { m_show_path_depths = val; }
416 void set_show_nesting (bool val);
417 void set_show_nesting_locations (bool val);
418 void set_show_nesting_levels (bool val);
419 void set_max_errors (int val) { m_max_errors = val; }
421 {
422 m_escape_format = val;
423 }
424
425 void set_format_decoder (printer_fn format_decoder);
427
428 /* Various accessors. */
430 {
432 }
433 bool show_path_depths_p () const { return m_show_path_depths; }
434 sink &get_sink (size_t idx) const;
437 {
438 return m_escape_format;
439 }
440
441 file_cache &
443 {
445 return *m_file_cache;
446 }
447
453 {
454 return m_client_data_hooks;
455 }
456
459
460 const urlifier *get_urlifier () const;
461
462 text_art::theme *get_diagram_theme () const { return m_diagrams.m_theme; }
463
465 {
466 return m_diagnostic_counters.m_count_for_kind[static_cast<size_t> (kind)];
467 }
468 int diagnostic_count (enum kind kind) const
469 {
470 return m_diagnostic_counters.get_count (kind);
471 }
472
473 /* Option-related member functions. */
474 inline bool option_enabled_p (option_id opt_id) const
475 {
476 if (!m_option_id_mgr)
477 return true;
478 return m_option_id_mgr->option_enabled_p (opt_id);
479 }
480
481 inline char *make_option_name (option_id opt_id,
482 enum kind orig_diag_kind,
483 enum kind diag_kind) const
484 {
485 if (!m_option_id_mgr)
486 return nullptr;
487 return m_option_id_mgr->make_option_name (opt_id,
488 orig_diag_kind,
489 diag_kind);
490 }
491
492 inline char *make_option_url (option_id opt_id) const
493 {
494 if (!m_option_id_mgr)
495 return nullptr;
496 return m_option_id_mgr->make_option_url (opt_id);
497 }
498
499 void
500 set_option_id_manager (std::unique_ptr<option_id_manager> option_id_mgr,
501 unsigned lang_mask);
502
503 unsigned get_lang_mask () const
504 {
505 return m_lang_mask;
506 }
507
508 bool diagnostic_impl (rich_location *, const metadata *,
509 option_id, const char *,
510 va_list *, enum kind) ATTRIBUTE_GCC_DIAG(5,0);
511 bool diagnostic_n_impl (rich_location *, const metadata *,
512 option_id, unsigned HOST_WIDE_INT,
513 const char *, const char *, va_list *,
514 enum kind) ATTRIBUTE_GCC_DIAG(7,0);
515
517 {
518 return m_diagnostic_groups.m_diagnostic_nesting_level;
519 }
520
521 char *build_indent_prefix () const;
522
523 int
524 pch_save (FILE *f)
525 {
526 return m_option_classifier.pch_save (f);
527 }
528
529 int
530 pch_restore (FILE *f)
531 {
532 return m_option_classifier.pch_restore (f);
533 }
534
535
538 {
539 return m_diagnostic_buffer;
540 }
543
544 std::unique_ptr<pretty_printer> clone_printer () const
545 {
546 return m_reference_printer->clone ();
547 }
548
553
554 void
555 add_sink (std::unique_ptr<sink>);
556
558
559 bool supports_fnotice_on_stderr_p () const;
560
561 /* Raise SIGABRT on any diagnostic of severity kind::error or higher. */
562 void
564 {
565 m_abort_on_error = val;
566 }
567
568 /* Accessor for use in serialization, e.g. by C++ modules. */
569 auto &
571 {
572 return m_option_classifier.m_classification_history;
573 }
574
575 void set_main_input_filename (const char *filename);
576
577 void
579 {
580 m_opt_permissive = opt_permissive;
581 }
582
583 void
584 set_fatal_errors (bool fatal_errors)
585 {
586 m_fatal_errors = fatal_errors;
587 }
588
589 void
591 const char *,
592 va_list *))
593 {
594 m_internal_error = cb;
595 }
596
597 void
600 {
602 }
603
604 void
606
614 {
615 return m_source_printing;
616 }
617
620
621 void set_caret_max_width (int value);
622
623private:
625
627
629
630 void check_max_errors (bool flush);
631 void action_after_output (enum kind diag_kind);
632
633 /* Data members.
634 Ideally, all of these would be private. */
635
636private:
637 /* A reference instance of pretty_printer created by the client
638 and owned by the context. Used for cloning when creating/adding
639 output formats.
640 Owned by the context; this would be a std::unique_ptr if
641 context had a proper ctor. */
643
644 /* Cache of source code.
645 Owned by the context; this would be a std::unique_ptr if
646 context had a proper ctor. */
648
649 /* The number of times we have issued diagnostics. */
651
652 /* True if it has been requested that warnings be treated as errors. */
654
655 /* The number of option indexes that can be passed to warning() et
656 al. */
658
659 /* The stack of sets of overridden diagnostic option severities. */
661
662 /* True if we should print any CWE identifiers associated with
663 diagnostics. */
665
666 /* True if we should print any rules associated with diagnostics. */
668
669 /* How should diagnostics::paths::path objects be printed. */
671
672 /* True if we should print stack depths when printing diagnostic paths. */
674
675 /* True if we should print the command line option which controls
676 each diagnostic, if known. */
678
679 /* True if we should raise a SIGABRT on errors. */
681
682public:
683 /* True if we should show the column number on diagnostics. */
685
686 /* True if pedwarns are errors. */
688
689 /* True if permerrors are warnings. */
691
692private:
693 /* The option to associate with turning permerrors into warnings,
694 if any. */
696
697 /* True if errors are fatal. */
699
700public:
701 /* True if all warnings should be disabled. */
703
704 /* True if warnings should be given in system headers. */
706
707private:
708 /* Maximum number of errors to report. */
710
711 /* Client-supplied callbacks for use in text output. */
712 struct {
713 /* This function is called before any message is printed out. It is
714 responsible for preparing message prefix and such. For example, it
715 might say:
716 In file included from "/usr/local/include/curses.h:5:
717 from "/home/gdr/src/nifty_printer.h:56:
718 ...
719 */
721
722 /* This function is called by diagnostic_show_locus in between
723 disjoint spans of source code, so that the context can print
724 something to indicate that a new span of source code has begun. */
727
728 /* This function is called after the diagnostic message is printed. */
731
732 /* Client hook to report an internal error. */
733 void (*m_internal_error) (context *, const char *, va_list *);
734
735 /* Client hook to adjust properties of the given diagnostic that we're
736 about to issue, such as its kind. */
738
739 /* Owned by the context; this would be a std::unique_ptr if
740 context had a proper ctor. */
742 unsigned m_lang_mask;
743
744 /* A stack of optional hooks for adding URLs to quoted text strings in
745 diagnostics. Only used for the main diagnostic message.
746 Typically a single one owner by the context, but can be temporarily
747 overridden by a borrowed urlifier (e.g. on-stack). */
754
755public:
756 /* Auxiliary data for client. */
758
759 /* Used to detect that the last caret was printed at the same location. */
760 location_t m_last_location;
761
762private:
764
766
769
770 /* True if -freport-bug option is used. */
772
773 /* Used to specify additional diagnostic output to be emitted after the
774 rest of the diagnostic. This is for implementing
775 -fdiagnostics-parseable-fixits and GCC_EXTRA_DIAGNOSTIC_OUTPUT. */
777
778 /* How should non-ASCII/non-printable bytes be escaped when
779 a diagnostic suggests escaping the source code on output. */
781
782 /* If non-NULL, a diagnostics::changes::change_set to which fix-it hints
783 should be applied, for generating patches.
784 Owned by the context; this would be a std::unique_ptr if
785 context had a proper ctor. */
787
788 /* Fields relating to diagnostic groups. */
789 struct {
790 /* How many diagnostic_group instances are currently alive. */
792
793 /* How many nesting levels have been pushed within this group. */
795
796 /* How many diagnostics have been emitted since the bottommost
797 diagnostic_group was pushed. */
799
800 /* The "group+diagnostic" nesting depth from which to inhibit notes. */
803
804 void inhibit_notes_in_group (bool inhibit = true);
805 bool notes_inhibited_in_group () const;
806
807 /* The various sinks to which diagnostics are to be outputted
808 (text vs structured formats such as SARIF).
809 The sinks are owned by the context; this would be a
810 std::vector<std::unique_ptr> if context had a
811 proper ctor. */
813
814 /* Callback to set the locations of call sites along the inlining
815 stack corresponding to a diagnostic location. Needed to traverse
816 the BLOCK_SUPERCONTEXT() chain hanging off the LOCATION_BLOCK()
817 of a diagnostic's location. */
819
820 /* A bundle of hooks for providing data to the context about its client
821 e.g. version information, plugins, etc.
822 Used by SARIF output to give metadata about the client that's
823 producing diagnostics.
824 Owned by the context; this would be a std::unique_ptr if
825 context had a proper ctor. */
827
828 /* Support for diagrams. */
829 struct
830 {
831 /* Theme to use when generating diagrams.
832 Can be NULL (if text art is disabled).
833 Owned by the context; this would be a std::unique_ptr if
834 context had a proper ctor. */
836
838
839 /* Owned by the context. */
841
842 /* Borrowed pointer to the active diagnostics::buffer, if any.
843 If null (the default), then diagnostics that are reported to the
844 context are immediately issued to the output format.
845 If non-null, then diagnostics that are reported to the context
846 are buffered in the buffer, and may be issued to the output format
847 later (if the buffer is flushed), moved to other buffers, or
848 discarded (if the buffer is cleared). */
850
851 /* Owned by the context.
852 Debugging option: if non-NULL, report information to the logger
853 on what the context is doing. */
855};
856
857/* Client supplied function to announce a diagnostic
858 (for text-based diagnostic output). */
859inline text_starter_fn &
864
865/* Client supplied function called between disjoint spans of source code,
866 so that the context can print
867 something to indicate that a new span of source code has begun. */
870{
872}
873
874/* Client supplied function called after a diagnostic message is
875 displayed (for text-based diagnostic output). */
876inline text_finalizer_fn &
881
882} // namespace diagnostics
883
884#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:813
int converted_column(expanded_location s) const
Definition diagnostics/context.cc:805
column_policy(const context &dc)
Definition diagnostics/context.cc:795
Definition diagnostics/context.h:254
void set_report_bug(bool val)
Definition diagnostics/context.h:402
start_span_fn< to_text > m_text_start_span
Definition diagnostics/context.h:725
void set_main_input_filename(const char *filename)
Definition diagnostics/context.cc:523
pretty_printer * m_reference_printer
Definition diagnostics/context.h:642
bool diagnostic_impl(rich_location *, const metadata *, option_id, const char *, va_list *, enum kind) ATTRIBUTE_GCC_DIAG(5
Definition diagnostics/context.cc:1648
void set_show_nesting(bool val)
Definition diagnostics/context.cc:315
text_starter_fn m_begin_diagnostic
Definition diagnostics/context.h:720
void get_any_inlining_info(diagnostic_info *diagnostic)
Definition diagnostics/context.cc:1208
bool option_enabled_p(option_id opt_id) const
Definition diagnostics/context.h:474
set_locations_callback_t m_set_locations_cb
Definition diagnostics/context.h:818
bool m_abort_on_error
Definition diagnostics/context.h:680
void set_diagnostic_buffer(buffer *)
Definition buffering.cc:39
bool m_show_path_depths
Definition diagnostics/context.h:673
bool supports_fnotice_on_stderr_p() const
Definition diagnostics/context.cc:514
buffer * m_diagnostic_buffer
Definition diagnostics/context.h:849
void(* m_internal_error)(context *, const char *, va_list *)
Definition diagnostics/context.h:733
text_finalizer_fn m_end_diagnostic
Definition diagnostics/context.h:729
enum diagnostic_path_format m_path_format
Definition diagnostics/context.h:670
enum diagnostics_escape_format m_escape_format
Definition diagnostics/context.h:780
void refresh_output_sinks()
Definition diagnostics/context.cc:619
const client_data_hooks * get_client_data_hooks() const
Definition diagnostics/context.h:452
bool warning_enabled_at(location_t loc, option_id opt_id)
Definition diagnostics/context.cc:1284
int diagnostic_count(enum kind kind) const
Definition diagnostics/context.h:468
void * m_client_aux_data
Definition diagnostics/context.h:757
void flush_diagnostic_buffer(buffer &)
Definition buffering.cc:94
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:653
void DEBUG_FUNCTION dump() const
Definition diagnostics/context.h:281
int m_n_opts
Definition diagnostics/context.h:657
column_options m_column_options
Definition diagnostics/context.h:768
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:1302
option_id m_opt_permissive
Definition diagnostics/context.h:695
void pop_urlifier()
Definition diagnostics/context.cc:576
void set_option_id_manager(std::unique_ptr< option_id_manager > option_id_mgr, unsigned lang_mask)
Definition diagnostics/context.cc:551
const char *const * get_original_argv()
Definition diagnostics/context.h:288
friend class text_sink
Definition diagnostics/context.h:266
friend start_span_fn< to_text > & start_span(context *dc)
Definition diagnostics/context.h:869
void set_show_cwe(bool val)
Definition diagnostics/context.h:407
changes::change_set * get_fixits_change_set() const
Definition diagnostics/context.h:448
counters m_diagnostic_counters
Definition diagnostics/context.h:650
text_art::theme * m_theme
Definition diagnostics/context.h:835
int pch_restore(FILE *f)
Definition diagnostics/context.h:530
unsigned m_lang_mask
Definition diagnostics/context.h:742
buffer * get_diagnostic_buffer() const
Definition diagnostics/context.h:537
void pop_nesting_level()
Definition diagnostics/context.cc:1845
void report_global_digraph(const lazily_created< digraphs::digraph > &)
Definition diagnostics/context.cc:1583
void set_escape_format(enum diagnostics_escape_format val)
Definition diagnostics/context.h:420
void push_diagnostics(location_t where)
Definition diagnostics/context.h:355
void set_nesting_level(int new_level)
Definition diagnostics/context.cc:1853
logging::logger * get_logger()
Definition diagnostics/context.h:283
void set_fatal_errors(bool fatal_errors)
Definition diagnostics/context.h:584
void remove_all_output_sinks()
Definition diagnostics/context.cc:478
void set_abort_on_error(bool val)
Definition diagnostics/context.h:563
bool m_permissive
Definition diagnostics/context.h:690
void(* m_adjust_diagnostic_info)(const context &, diagnostic_info *)
Definition diagnostics/context.h:737
void set_show_highlight_colors(bool val)
Definition diagnostics/context.cc:637
bool m_inhibit_notes_p
Definition diagnostics/context.h:765
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:1817
void set_format_decoder(printer_fn format_decoder)
Definition diagnostics/context.cc:629
int m_group_nesting_depth
Definition diagnostics/context.h:791
int m_emission_count
Definition diagnostics/context.h:798
file_cache * m_file_cache
Definition diagnostics/context.h:647
bool m_show_rules
Definition diagnostics/context.h:667
client_data_hooks * m_client_data_hooks
Definition diagnostics/context.h:826
void inhibit_notes()
Definition diagnostics/context.h:605
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:1688
friend text_finalizer_fn & text_finalizer(context *dc)
Definition diagnostics/context.h:877
bool notes_inhibited_in_group() const
Definition diagnostics/context.cc:1082
int m_diagnostic_nesting_level
Definition diagnostics/context.h:794
int & diagnostic_count(enum kind kind)
Definition diagnostics/context.h:464
void clear_diagnostic_buffer(buffer &)
Definition buffering.cc:78
bool show_path_depths_p() const
Definition diagnostics/context.h:433
int m_max_errors
Definition diagnostics/context.h:709
void set_adjust_diagnostic_info_callback(void(*cb)(const context &, diagnostic_info *))
Definition diagnostics/context.h:598
unsigned get_lang_mask() const
Definition diagnostics/context.h:503
const logical_locations::manager * get_logical_location_manager() const
Definition diagnostics/context.cc:587
void set_set_locations_callback(set_locations_callback_t cb)
Definition diagnostics/context.h:293
bool m_show_column
Definition diagnostics/context.h:684
auto_vec< urlifier_stack_node > * m_urlifier_stack
Definition diagnostics/context.h:753
bool m_warn_system_headers
Definition diagnostics/context.h:705
const column_options & get_column_options() const
Definition diagnostics/context.h:619
pretty_printer * get_reference_printer() const
Definition diagnostics/context.h:549
void color_init(int value)
Definition diagnostics/context.cc:255
char ** m_original_argv
Definition diagnostics/context.h:840
void report_verbatim(text_info &)
Definition diagnostics/context.cc:1569
void set_prefixing_rule(diagnostic_prefixing_rule_t rule)
Definition diagnostics/context.cc:646
void set_warning_as_error_requested(bool val)
Definition diagnostics/context.h:398
source_printing_options & get_source_printing_options()
Definition diagnostics/context.h:608
void set_extra_output_kind(enum diagnostics_extra_output_kind kind)
Definition diagnostics/context.h:403
void set_show_path_depths(bool val)
Definition diagnostics/context.h:414
start_span_fn< to_html > m_html_start_span
Definition diagnostics/context.h:726
void set_show_option_requested(bool val)
Definition diagnostics/context.h:415
void(* set_locations_callback_t)(const context &, diagnostic_info *)
Definition diagnostics/context.h:269
void push_borrowed_urlifier(const urlifier &)
Definition diagnostics/context.cc:568
location_t m_last_location
Definition diagnostics/context.h:760
option_classifier m_option_classifier
Definition diagnostics/context.h:660
char * build_indent_prefix() const
void set_original_argv(unique_argv original_argv)
Definition diagnostics/context.cc:538
option_id_manager * m_option_id_mgr
Definition diagnostics/context.h:741
bool bool bool report_diagnostic(diagnostic_info *)
Definition diagnostics/context.cc:1347
std::unique_ptr< pretty_printer > clone_printer() const
Definition diagnostics/context.h:544
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:590
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:1839
void set_max_errors(int val)
Definition diagnostics/context.h:419
char * make_option_name(option_id opt_id, enum kind orig_diag_kind, enum kind diag_kind) const
Definition diagnostics/context.h:481
void push_owned_urlifier(std::unique_ptr< urlifier >)
Definition diagnostics/context.cc:560
friend text_starter_fn & text_starter(context *dc)
Definition diagnostics/context.h:860
bool execution_failed_p() const
Definition diagnostics/context.cc:469
void add_sink(std::unique_ptr< sink >)
Definition diagnostics/context.cc:503
void pop_diagnostics(location_t where)
Definition diagnostics/context.h:364
file_cache & get_file_cache() const
Definition diagnostics/context.h:442
int m_lock
Definition diagnostics/context.h:763
bool m_fatal_errors
Definition diagnostics/context.h:698
void inhibit_notes_in_group(bool inhibit=true)
Definition diagnostics/context.cc:1052
void action_after_output(enum kind diag_kind)
Definition diagnostics/context.cc:975
void initialize_fixits_change_set()
Definition diagnostics/context.cc:655
bool warning_as_error_requested_p() const
Definition diagnostics/context.h:429
struct diagnostics::context::@341201264073143215367363357234376160363014117137 m_diagnostic_groups
void set_client_data_hooks(std::unique_ptr< client_data_hooks > hooks)
Definition diagnostics/context.cc:530
text_art::theme * get_diagram_theme() const
Definition diagnostics/context.h:462
logging::logger * m_logger
Definition diagnostics/context.h:854
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:578
void emit_diagram(const diagram &diag)
Definition diagnostics/context.cc:1730
bool bool int get_diagnostic_nesting_level() const
Definition diagnostics/context.h:516
struct diagnostics::context::@315143341136332350101266143205316065242223315254 m_diagrams
char * make_option_url(option_id opt_id) const
Definition diagnostics/context.h:492
bool m_inhibit_warnings
Definition diagnostics/context.h:702
bool m_report_bug
Definition diagnostics/context.h:771
enum diagnostic_path_format get_path_format() const
Definition diagnostics/context.h:435
void set_pretty_printer(std::unique_ptr< pretty_printer > pp)
Definition diagnostics/context.cc:609
const source_printing_options & get_source_printing_options() const
Definition diagnostics/context.h:613
void set_caret_max_width(int value)
Definition diagnostics/context.cc:122
int pch_save(FILE *f)
Definition diagnostics/context.h:524
source_printing_options m_source_printing
Definition diagnostics/context.h:767
const urlifier * get_urlifier() const
Definition diagnostics/context.cc:595
void set_sink(std::unique_ptr< sink > sink_)
Definition diagnostics/context.cc:485
enum diagnostics_extra_output_kind m_extra_output_kind
Definition diagnostics/context.h:776
void error_recursion() ATTRIBUTE_NORETURN
Definition diagnostics/context.cc:1745
void begin_group()
Definition diagnostics/context.cc:1811
bool m_pedantic_errors
Definition diagnostics/context.h:687
void check_max_errors(bool flush)
Definition diagnostics/context.cc:951
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:801
column_options & get_column_options()
Definition diagnostics/context.h:618
bool m_show_cwe
Definition diagnostics/context.h:664
auto_vec< sink * > m_sinks
Definition diagnostics/context.h:812
void set_show_rules(bool val)
Definition diagnostics/context.h:408
sink & get_sink(size_t idx) const
Definition diagnostics/context.cc:495
void set_show_nesting_locations(bool val)
Definition diagnostics/context.cc:324
auto & get_classification_history()
Definition diagnostics/context.h:570
changes::change_set * m_fixits_change_set
Definition diagnostics/context.h:786
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:1912
void set_path_format(enum diagnostic_path_format val)
Definition diagnostics/context.h:410
bool m_show_option_requested
Definition diagnostics/context.h:677
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:1324
bool diagnostic_enabled(diagnostic_info *diagnostic)
Definition diagnostics/context.cc:1240
enum diagnostics_escape_format get_escape_format() const
Definition diagnostics/context.h:436
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 digraphs.h:88
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:835
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:35
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:81
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:173
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 coretypes.h:167
pretty_printer * get_printer(to_text &)
Definition source-printing.cc:713
text_starter_fn & text_starter(context *dc)
Definition diagnostics/context.h:860
start_span_fn< to_text > & start_span(context *dc)
Definition diagnostics/context.h:869
text_finalizer_fn & text_finalizer(context *dc)
Definition diagnostics/context.h:877
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
kind
Definition kinds.h:27
void(*)(const location_print_policy &, TextOrHtml &text_or_html, expanded_location) start_span_fn
Definition diagnostics/context.h:82
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:1256
Definition column-options.h:28
Definition diagnostics/context.h:749
bool m_owned
Definition diagnostics/context.h:751
urlifier * m_urlifier
Definition diagnostics/context.h:750
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:814
#define DEBUG_FUNCTION
Definition system.h:1236