21#ifndef GCC_DIAGNOSTIC_H
22#define GCC_DIAGNOSTIC_H
24#include "rich-location.h"
401 bool should_skip_bom);
841#define diagnostic_context_auxiliary_data(DC) (DC)->m_client_aux_data
842#define diagnostic_info_auxiliary_data(DI) (DI)->x_data
845#define diagnostic_format_decoder(DC) ((DC)->printer->format_decoder)
848#define diagnostic_prefixing_rule(DC) ((DC)->printer->wrapping.rule)
872#define errorcount global_dc->diagnostic_count (DK_ERROR)
874#define warningcount global_dc->diagnostic_count (DK_WARNING)
876#define werrorcount global_dc->diagnostic_count (DK_WERROR)
878#define sorrycount global_dc->diagnostic_count (DK_SORRY)
881#define diagnostic_report_warnings_p(DC, LOC) \
882 (!(DC)->m_inhibit_warnings \
883 && !(in_system_header_at (LOC) && !(DC)->m_warn_system_headers))
929 rich_location *richloc,
956 bool should_skip_bom)
998#ifdef ATTRIBUTE_GCC_DIAG
1046 return diagnostic->message.m_richloc->get_num_locations ();
1072 return (
s2.column &&
s1.line ==
s2.line
1074 > abs (
s1.column -
s2.column)));
Definition diagnostic-client-data-hooks.h:31
Definition diagnostic.h:374
void action_after_output(diagnostic_t diag_kind)
Definition diagnostic.cc:741
int m_tabstop
Definition diagnostic.h:754
void initialize(int n_opts)
Definition diagnostic.cc:207
file_cache * m_file_cache
Definition diagnostic.h:595
void set_show_rules(bool val)
Definition diagnostic.h:468
void get_any_inlining_info(diagnostic_info *diagnostic)
Definition diagnostic.cc:1256
enum diagnostic_path_format m_path_format
Definition diagnostic.h:618
void finish()
Definition diagnostic.cc:362
void show_any_path(const diagnostic_info &diagnostic)
Definition diagnostic.cc:911
void end_group()
Definition diagnostic.cc:2366
struct diagnostic_context::@14 m_text_callbacks
void error_recursion() ATTRIBUTE_NORETURN
Definition diagnostic.cc:2298
void report_current_module(location_t where)
Definition diagnostic.cc:841
void set_option_hooks(diagnostic_option_enabled_cb option_enabled_cb, void *option_state, diagnostic_make_option_name_cb make_option_name_cb, diagnostic_make_option_url_cb make_option_url_cb, unsigned lang_mask)
Definition diagnostic.cc:424
void set_escape_format(enum diagnostics_escape_format val)
Definition diagnostic.h:476
bool diagnostic_enabled(diagnostic_info *diagnostic)
Definition diagnostic.cc:1452
void(* set_locations_callback_t)(diagnostic_context *, diagnostic_info *)
Definition diagnostic.h:385
bool m_show_option_requested
Definition diagnostic.h:625
void show_locus(const rich_location &richloc, diagnostic_t diagnostic_kind, pretty_printer *pp, diagnostic_source_effect_info *effect_info)
Definition diagnostic-show-locus.cc:3214
void set_set_locations_callback(set_locations_callback_t cb)
Definition diagnostic.h:394
bool m_report_bug
Definition diagnostic.h:739
void maybe_show_locus(const rich_location &richloc, diagnostic_t diagnostic_kind, pretty_printer *pp, diagnostic_source_effect_info *effect_info)
Definition diagnostic-show-locus.cc:3181
edit_context * get_edit_context() const
Definition diagnostic.h:504
void set_path_format(enum diagnostic_path_format val)
Definition diagnostic.h:469
void set_max_errors(int val)
Definition diagnostic.h:475
diagnostic_start_span_fn m_start_span
Definition diagnostic.h:671
enum diagnostics_extra_output_kind m_extra_output_kind
Definition diagnostic.h:744
hash_set< location_t, false, location_hash > * m_includes_seen
Definition diagnostic.h:790
bool m_inhibit_warnings
Definition diagnostic.h:648
int m_emission_count
Definition diagnostic.h:772
bool m_show_column
Definition diagnostic.h:632
void set_urlifier(urlifier *)
Definition diagnostic.cc:438
const line_map_ordinary * m_last_module
Definition diagnostic.h:728
int converted_column(expanded_location s) const
Definition diagnostic.cc:531
diagnostic_option_classifier m_option_classifier
Definition diagnostic.h:608
bool m_show_path_depths
Definition diagnostic.h:621
int & diagnostic_count(diagnostic_t kind)
Definition diagnostic.h:516
void push_diagnostics(location_t where)
Definition diagnostic.h:431
void begin_group()
Definition diagnostic.cc:2360
diagnostic_output_format * m_output_format
Definition diagnostic.h:777
enum diagnostics_escape_format m_escape_format
Definition diagnostic.h:759
set_locations_callback_t m_set_locations_cb
Definition diagnostic.h:783
struct diagnostic_context::@15 m_option_callbacks
friend diagnostic_starter_fn & diagnostic_starter(diagnostic_context *context)
Definition diagnostic.h:818
diagnostic_t classify_diagnostic(int option_index, diagnostic_t new_kind, location_t where)
Definition diagnostic.h:421
void print_any_cwe(const diagnostic_info &diagnostic)
Definition diagnostic.cc:1344
void set_show_path_depths(bool val)
Definition diagnostic.h:473
const diagnostic_client_data_hooks * get_client_data_hooks()
Definition diagnostic.h:508
void print_option_information(const diagnostic_info &diagnostic, diagnostic_t orig_diag_kind)
Definition diagnostic.cc:1421
diagnostic_make_option_url_cb m_make_option_url_cb
Definition diagnostic.h:704
urlifier * m_urlifier
Definition diagnostic.h:712
bool m_warn_system_headers
Definition diagnostic.h:651
enum diagnostic_path_format get_path_format() const
Definition diagnostic.h:491
diagnostic_client_data_hooks * m_client_data_hooks
Definition diagnostic.h:796
diagnostic_starter_fn m_begin_diagnostic
Definition diagnostic.h:666
void(* m_internal_error)(diagnostic_context *, const char *, va_list *)
Definition diagnostic.h:679
bool m_show_cwe
Definition diagnostic.h:612
void(* ice_handler_callback_t)(diagnostic_context *)
Definition diagnostic.h:384
void set_client_data_hooks(diagnostic_client_data_hooks *hooks)
Definition diagnostic.cc:415
char * make_option_name(int option_index, diagnostic_t orig_diag_kind, diagnostic_t diag_kind) const
Definition diagnostic.h:532
void * m_client_aux_data
Definition diagnostic.h:720
void set_warning_as_error_requested(bool val)
Definition diagnostic.h:458
location_t m_last_location
Definition diagnostic.h:723
label_text get_location_text(const expanded_location &s) const
Definition diagnostic.cc:565
void check_max_errors(bool flush)
Definition diagnostic.cc:718
friend diagnostic_start_span_fn & diagnostic_start_span(diagnostic_context *context)
Definition diagnostic.h:827
diagnostic_finalizer_fn m_end_diagnostic
Definition diagnostic.h:674
ice_handler_callback_t m_ice_handler_cb
Definition diagnostic.h:786
bool includes_seen_p(const line_map_ordinary *map)
Definition diagnostic.cc:818
unsigned get_lang_mask() const
Definition diagnostic.h:558
enum diagnostics_escape_format get_escape_format() const
Definition diagnostic.h:492
void set_text_art_charset(enum diagnostic_text_art_charset charset)
Definition diagnostic.cc:2491
text_art::theme * m_theme
Definition diagnostic.h:803
bool m_inhibit_notes_p
Definition diagnostic.h:733
bool show_path_depths_p() const
Definition diagnostic.h:490
void * m_option_state
Definition diagnostic.h:690
void color_init(int value)
Definition diagnostic.cc:298
bool m_warning_as_error_requested
Definition diagnostic.h:601
pretty_printer * printer
Definition diagnostic.h:591
friend diagnostic_finalizer_fn & diagnostic_finalizer(diagnostic_context *context)
Definition diagnostic.h:835
bool option_unspecified_p(int opt) const
Definition diagnostic.h:408
bool option_enabled_p(int option_index) const
Definition diagnostic.h:522
void set_show_option_requested(bool val)
Definition diagnostic.h:474
void urls_init(int value)
Definition diagnostic.cc:325
bool report_diagnostic(diagnostic_info *)
Definition diagnostic.cc:1517
int m_n_opts
Definition diagnostic.h:605
int m_diagnostic_count[DK_LAST_DIAGNOSTIC_KIND]
Definition diagnostic.h:598
void print_any_rules(const diagnostic_info &diagnostic)
Definition diagnostic.cc:1379
file_cache & get_file_cache() const
Definition diagnostic.h:498
void pop_diagnostics(location_t where)
Definition diagnostic.h:435
diagnostic_make_option_name_cb m_make_option_name_cb
Definition diagnostic.h:698
bool m_pedantic_errors
Definition diagnostic.h:635
text_art::theme * get_diagram_theme() const
Definition diagnostic.h:512
int m_column_origin
Definition diagnostic.h:751
bool m_fatal_errors
Definition diagnostic.h:645
bool m_permissive
Definition diagnostic.h:638
const diagnostic_output_format * get_output_format() const
Definition diagnostic.h:447
unsigned m_lang_mask
Definition diagnostic.h:707
void create_edit_context()
Definition diagnostic.cc:446
enum diagnostics_column_unit m_column_unit
Definition diagnostic.h:748
int m_nesting_depth
Definition diagnostic.h:768
void emit_diagram(const diagnostic_diagram &diagram)
Definition diagnostic.cc:2258
int m_lock
Definition diagnostic.h:730
void set_ice_handler_callback(ice_handler_callback_t cb)
Definition diagnostic.h:480
diagnostic_option_enabled_cb m_option_enabled_cb
Definition diagnostic.h:686
void set_report_bug(bool val)
Definition diagnostic.h:462
bool m_show_rules
Definition diagnostic.h:615
void set_show_cwe(bool val)
Definition diagnostic.h:467
struct diagnostic_context::@16 m_diagnostic_groups
void(* m_print_path)(diagnostic_context *, const diagnostic_path *)
Definition diagnostic.h:715
int m_max_errors
Definition diagnostic.h:655
bool m_abort_on_error
Definition diagnostic.h:629
bool warning_enabled_at(location_t loc, int opt)
Definition diagnostic.cc:1496
struct diagnostic_context::@17 m_diagrams
edit_context * m_edit_context_ptr
Definition diagnostic.h:763
diagnostic_source_printing_options m_source_printing
Definition diagnostic.h:735
int m_opt_permissive
Definition diagnostic.h:642
bool warning_as_error_requested_p() const
Definition diagnostic.h:486
void set_extra_output_kind(enum diagnostics_extra_output_kind kind)
Definition diagnostic.h:463
void set_output_format(diagnostic_output_format *output_format)
Definition diagnostic.cc:407
char * make_option_url(int option_index) const
Definition diagnostic.h:543
void initialize_input_context(diagnostic_input_charset_callback ccb, bool should_skip_bom)
Definition diagnostic.cc:353
Definition diagnostic-diagram.h:33
Definition diagnostic.h:254
void push()
Definition diagnostic.cc:175
diagnostic_t update_effective_level_from_pragmas(diagnostic_info *diagnostic) const
Definition diagnostic.cc:1285
void fini()
Definition diagnostic.cc:164
int m_n_opts
Definition diagnostic.h:297
void pop(location_t where)
Definition diagnostic.cc:185
bool option_unspecified_p(int opt) const
Definition diagnostic.h:266
diagnostic_t * m_classify_diagnostic
Definition diagnostic.h:305
diagnostic_t get_current_override(int opt) const
Definition diagnostic.h:271
diagnostic_classification_change_t * m_classification_history
Definition diagnostic.h:312
int * m_push_list
Definition diagnostic.h:318
int m_n_classification_history
Definition diagnostic.h:315
diagnostic_t classify_diagnostic(const diagnostic_context *context, int option_index, diagnostic_t new_kind, location_t where)
Definition diagnostic.cc:1116
void init(int n_opts)
Definition diagnostic.cc:153
int m_n_push
Definition diagnostic.h:319
Definition diagnostic-path.h:188
Definition diagnostic-label-effects.h:41
Definition diagnostic.h:231
void on_begin_diagnostic(const diagnostic_info &) override
Definition diagnostic.cc:2417
void on_begin_group() override
Definition diagnostic.h:237
void on_end_diagnostic(const diagnostic_info &, diagnostic_t orig_diag_kind) override
Definition diagnostic.cc:2423
bool machine_readable_stderr_p() const final override
Definition diagnostic.h:243
void on_end_group() override
Definition diagnostic.h:238
diagnostic_text_output_format(diagnostic_context &context)
Definition diagnostic.h:233
~diagnostic_text_output_format()
Definition diagnostic.cc:2397
void on_diagram(const diagnostic_diagram &diagram) override
Definition diagnostic.cc:2431
Definition edit-context.h:44
Definition logical-location.h:52
Definition pretty-print.h:244
Definition pretty-print-urlifier.h:27
const char *(* diagnostic_input_charset_callback)(const char *)
Definition coretypes.h:163
static struct string2counter_map map[debug_counter_number_of_counters]
Definition dbgcnt.cc:39
void ATTRIBUTE_NORETURN
Definition diagnostic-core.h:72
diagnostic_t
Definition diagnostic-core.h:29
@ DK_LAST_DIAGNOSTIC_KIND
Definition diagnostic-core.h:33
#define ATTRIBUTE_GCC_DIAG(m, n)
Definition diagnostic-core.h:67
void diagnostic_set_caret_max_width(diagnostic_context *context, int value)
Definition diagnostic.cc:139
void diagnostic_set_info(diagnostic_info *, const char *, va_list *, rich_location *, diagnostic_t) ATTRIBUTE_GCC_DIAG(2
void diagnostic_output_format_init_sarif_stream(diagnostic_context *context, bool formatted, FILE *stream)
Definition diagnostic-format-sarif.cc:1848
char * get_cwe_url(int cwe)
Definition diagnostic.cc:1332
location_t diagnostic_location(const diagnostic_info *diagnostic, int which=0)
Definition diagnostic.h:1036
const int CARET_LINE_MARGIN
Definition diagnostic.h:1062
diagnostics_escape_format
Definition diagnostic.h:51
@ DIAGNOSTICS_ESCAPE_FORMAT_BYTES
Definition diagnostic.h:58
@ DIAGNOSTICS_ESCAPE_FORMAT_UNICODE
Definition diagnostic.h:54
void diagnostic_output_format_init_json_file(diagnostic_context *context, bool formatted, const char *base_file_name)
Definition diagnostic-format-json.cc:396
char *(* diagnostic_make_option_url_cb)(const diagnostic_context *, int, unsigned)
Definition diagnostic.h:188
void void void diagnostic_append_note(diagnostic_context *, location_t, const char *,...) ATTRIBUTE_GCC_DIAG(3
char * file_name_as_prefix(diagnostic_context *, const char *)
Definition diagnostic.cc:104
int(* diagnostic_option_enabled_cb)(int, unsigned, void *)
Definition diagnostic.h:183
void void void char * diagnostic_build_prefix(diagnostic_context *, const diagnostic_info *)
Definition diagnostic.cc:596
void diagnostic_report_current_module(diagnostic_context *context, location_t where)
Definition diagnostic.h:921
diagnostic_text_art_charset
Definition diagnostic.h:117
@ DIAGNOSTICS_TEXT_ART_CHARSET_ASCII
Definition diagnostic.h:122
@ DIAGNOSTICS_TEXT_ART_CHARSET_NONE
Definition diagnostic.h:119
@ DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE
Definition diagnostic.h:126
@ DIAGNOSTICS_TEXT_ART_CHARSET_EMOJI
Definition diagnostic.h:129
diagnostic_path_format
Definition diagnostic.h:83
@ DPF_NONE
Definition diagnostic.h:85
@ DPF_SEPARATE_EVENTS
Definition diagnostic.h:89
@ DPF_INLINE_EVENTS
Definition diagnostic.h:95
void diagnostic_initialize_input_context(diagnostic_context *context, diagnostic_input_charset_callback ccb, bool should_skip_bom)
Definition diagnostic.h:954
diagnostics_extra_output_kind
Definition diagnostic.h:102
@ EXTRA_DIAGNOSTIC_OUTPUT_none
Definition diagnostic.h:104
@ EXTRA_DIAGNOSTIC_OUTPUT_fixits_v2
Definition diagnostic.h:111
@ EXTRA_DIAGNOSTIC_OUTPUT_fixits_v1
Definition diagnostic.h:108
void default_diagnostic_start_span_fn(diagnostic_context *, expanded_location)
Definition diagnostic.cc:1089
diagnostics_output_format
Definition diagnostic.h:64
@ DIAGNOSTICS_OUTPUT_FORMAT_SARIF_FILE
Definition diagnostic.h:78
@ DIAGNOSTICS_OUTPUT_FORMAT_JSON_STDERR
Definition diagnostic.h:69
@ DIAGNOSTICS_OUTPUT_FORMAT_TEXT
Definition diagnostic.h:66
@ DIAGNOSTICS_OUTPUT_FORMAT_SARIF_STDERR
Definition diagnostic.h:75
@ DIAGNOSTICS_OUTPUT_FORMAT_JSON_FILE
Definition diagnostic.h:72
void diagnostic_urls_init(diagnostic_context *context, int value=-1)
Definition diagnostic.h:909
void diagnostic_output_format_init_sarif_stderr(diagnostic_context *context, bool formatted)
Definition diagnostic-format-sarif.cc:1822
void diagnostic_abort_on_error(diagnostic_context *context)
Definition diagnostic.h:852
void diagnostic_output_format_init_sarif_file(diagnostic_context *context, bool formatted, const char *base_file_name)
Definition diagnostic-format-sarif.cc:1835
void diagnostic_inhibit_notes(diagnostic_context *context)
Definition diagnostic.h:809
int get_terminal_width(void)
Definition diagnostic.cc:118
void default_diagnostic_finalizer(diagnostic_context *, const diagnostic_info *, diagnostic_t)
Definition diagnostic.cc:1098
diagnostic_t diagnostic_classify_diagnostic(diagnostic_context *context, int optidx, diagnostic_t kind, location_t where)
Definition diagnostic.h:963
diagnostic_starter_fn & diagnostic_starter(diagnostic_context *context)
Definition diagnostic.h:818
const char * diagnostic_get_color_for_kind(diagnostic_t kind)
Definition diagnostic.cc:493
void(* diagnostic_start_span_fn)(diagnostic_context *, expanded_location)
Definition diagnostic.h:176
bool option_unspecified_p(int opt)
Definition diagnostic.h:1115
void(* diagnostic_finalizer_fn)(diagnostic_context *, const diagnostic_info *, diagnostic_t)
Definition diagnostic.h:179
bool diagnostic_ready_p()
Definition diagnostic.h:865
diagnostics_column_unit
Definition diagnostic.h:39
@ DIAGNOSTICS_COLUMN_UNIT_BYTE
Definition diagnostic.h:44
@ DIAGNOSTICS_COLUMN_UNIT_DISPLAY
Definition diagnostic.h:41
expanded_location diagnostic_expand_location(const diagnostic_info *diagnostic, int which=0)
Definition diagnostic.h:1054
void diagnostic_action_after_output(diagnostic_context *context, diagnostic_t diag_kind)
Definition diagnostic.h:1018
diagnostic_start_span_fn & diagnostic_start_span(diagnostic_context *context)
Definition diagnostic.h:827
int num_digits(int)
Definition diagnostic.cc:1658
json::value * json_from_expanded_location(diagnostic_context *context, location_t loc)
Definition diagnostic-format-json.cc:96
diagnostic_finalizer_fn & diagnostic_finalizer(diagnostic_context *context)
Definition diagnostic.h:835
void diagnostic_output_format_init(diagnostic_context *, const char *base_file_name, enum diagnostics_output_format, bool json_formatting)
Definition diagnostic.cc:2448
char * build_message_string(const char *,...) ATTRIBUTE_PRINTF_1
Definition diagnostic.cc:90
char *(* diagnostic_make_option_name_cb)(const diagnostic_context *, int, diagnostic_t, diagnostic_t)
Definition diagnostic.h:184
void diagnostic_finish(diagnostic_context *context)
Definition diagnostic.h:915
diagnostic_context * global_dc
Definition diagnostic.cc:85
void(* diagnostic_starter_fn)(diagnostic_context *, const diagnostic_info *)
Definition diagnostic.h:173
void diagnostic_check_max_errors(diagnostic_context *context, bool flush=false)
Definition diagnostic.h:1025
unsigned int diagnostic_num_locations(const diagnostic_info *diagnostic)
Definition diagnostic.h:1044
void diagnostic_initialize(diagnostic_context *context, int n_opts)
Definition diagnostic.h:897
void default_diagnostic_starter(diagnostic_context *, const diagnostic_info *)
Definition diagnostic.cc:1080
void diagnostic_color_init(diagnostic_context *context, int value=-1)
Definition diagnostic.h:903
bool warning_enabled_at(location_t loc, int opt)
Definition diagnostic.h:1109
void void diagnostic_set_info_translated(diagnostic_info *, const char *, va_list *, rich_location *, diagnostic_t) ATTRIBUTE_GCC_DIAG(2
void diagnostic_pop_diagnostics(diagnostic_context *context, location_t where)
Definition diagnostic.h:978
void diagnostic_show_locus(diagnostic_context *context, rich_location *richloc, diagnostic_t diagnostic_kind, pretty_printer *pp=nullptr, diagnostic_source_effect_info *effect_info=nullptr)
Definition diagnostic.h:928
void diagnostic_push_diagnostics(diagnostic_context *context, location_t where)
Definition diagnostic.h:972
bool diagnostic_same_line(const diagnostic_context *context, expanded_location s1, expanded_location s2)
Definition diagnostic.h:1069
bool diagnostic_report_diagnostic(diagnostic_context *context, diagnostic_info *diagnostic)
Definition diagnostic.h:992
void diagnostic_override_option_index(diagnostic_info *info, int optidx)
Definition diagnostic.h:889
void diagnostic_output_format_init_json_stderr(diagnostic_context *context, bool formatted)
Definition diagnostic-format-json.cc:384
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2002
static const char * base_file_name(const char *file_name)
Definition genautomata.cc:9224
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
Definition diagnostic.h:193
Definition diagnostic-diagram.h:25
Definition diagnostic.h:162
void * m_ao
Definition diagnostic.h:166
auto_vec< location_t, 8 > m_ilocs
Definition diagnostic.h:164
bool m_allsyslocs
Definition diagnostic.h:168
Definition diagnostic.h:136
const diagnostic_metadata * metadata
Definition diagnostic.h:150
diagnostic_info()
Definition diagnostic.h:137
void * x_data
Definition diagnostic.h:153
diagnostic_t kind
Definition diagnostic.h:155
int option_index
Definition diagnostic.h:157
struct diagnostic_info::inlining_info m_iinfo
text_info message
Definition diagnostic.h:143
rich_location * richloc
Definition diagnostic.h:146
Definition diagnostic.h:291
diagnostic_t kind
Definition diagnostic.h:294
int option
Definition diagnostic.h:293
location_t location
Definition diagnostic.h:292
Definition diagnostic.h:326
bool enabled
Definition diagnostic.h:330
bool show_line_numbers_p
Definition diagnostic.h:354
bool show_event_links_p
Definition diagnostic.h:368
int max_width
Definition diagnostic.h:333
char caret_chars[rich_location::STATICALLY_ALLOCATED_RANGES]
Definition diagnostic.h:336
bool show_ruler_p
Definition diagnostic.h:363
bool show_labels_p
Definition diagnostic.h:349
bool colorize_source_p
Definition diagnostic.h:345
int min_margin_width
Definition diagnostic.h:359
Definition pretty-print.h:34
#define gcc_assert(EXPR)
Definition system.h:821