123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- #ifndef GCC_DIAGNOSTIC_H
- #define GCC_DIAGNOSTIC_H
- #include "pretty-print.h"
- #include "diagnostic-core.h"
- struct diagnostic_info
- {
- text_info message;
- location_t location;
- unsigned int override_column;
-
- void *x_data;
-
- diagnostic_t kind;
-
- int option_index;
- };
- struct diagnostic_classification_change_t
- {
- location_t location;
- int option;
- diagnostic_t kind;
- };
- typedef void (*diagnostic_starter_fn) (diagnostic_context *,
- diagnostic_info *);
- typedef diagnostic_starter_fn diagnostic_finalizer_fn;
- struct diagnostic_context
- {
-
- pretty_printer *printer;
-
- int diagnostic_count[DK_LAST_DIAGNOSTIC_KIND];
-
- bool warning_as_error_requested;
-
- int n_opts;
-
- diagnostic_t *classify_diagnostic;
-
- diagnostic_classification_change_t *classification_history;
-
- int n_classification_history;
-
- int *push_list;
- int n_push;
-
- bool show_caret;
-
- int caret_max_width;
-
- char caret_char;
-
- bool show_option_requested;
-
- bool abort_on_error;
-
- bool show_column;
-
- bool pedantic_errors;
-
- bool permissive;
-
- int opt_permissive;
-
- bool fatal_errors;
-
- bool dc_inhibit_warnings;
-
- bool dc_warn_system_headers;
-
- unsigned int max_errors;
-
- diagnostic_starter_fn begin_diagnostic;
-
- diagnostic_finalizer_fn end_diagnostic;
-
- void (*internal_error) (diagnostic_context *, const char *, va_list *);
-
- int (*option_enabled) (int, void *);
-
- void *option_state;
-
- char *(*option_name) (diagnostic_context *, int, diagnostic_t, diagnostic_t);
-
- void *x_data;
-
- location_t last_location;
-
- const struct line_map *last_module;
- int lock;
- bool inhibit_notes_p;
- };
- static inline void
- diagnostic_inhibit_notes (diagnostic_context * context)
- {
- context->inhibit_notes_p = true;
- }
- #define diagnostic_starter(DC) (DC)->begin_diagnostic
- #define diagnostic_finalizer(DC) (DC)->end_diagnostic
- #define diagnostic_context_auxiliary_data(DC) (DC)->x_data
- #define diagnostic_info_auxiliary_data(DI) (DI)->x_data
- #define diagnostic_format_decoder(DC) ((DC)->printer->format_decoder)
- #define diagnostic_prefixing_rule(DC) ((DC)->printer->wrapping.rule)
- #define diagnostic_line_cutoff(DC) ((DC)->printer->wrapping.line_cutoff)
- #define diagnostic_flush_buffer(DC) pp_flush ((DC)->printer)
- #define diagnostic_last_module_changed(DC, MAP) \
- ((DC)->last_module != MAP)
- #define diagnostic_set_last_module(DC, MAP) \
- (DC)->last_module = MAP
- #define diagnostic_abort_on_error(DC) \
- (DC)->abort_on_error = true
- extern diagnostic_context *global_dc;
- #define diagnostic_kind_count(DC, DK) (DC)->diagnostic_count[(int) (DK)]
- #define errorcount diagnostic_kind_count (global_dc, DK_ERROR)
- #define warningcount diagnostic_kind_count (global_dc, DK_WARNING)
- #define werrorcount diagnostic_kind_count (global_dc, DK_WERROR)
- #define sorrycount diagnostic_kind_count (global_dc, DK_SORRY)
- #define diagnostic_report_warnings_p(DC, LOC) \
- (!(DC)->dc_inhibit_warnings \
- && !(in_system_header_at (LOC) && !(DC)->dc_warn_system_headers))
- #define report_diagnostic(D) diagnostic_report_diagnostic (global_dc, D)
- #define diagnostic_override_column(DI, COL) (DI)->override_column = (COL)
- #define diagnostic_override_option_index(DI, OPTIDX) \
- ((DI)->option_index = (OPTIDX))
- extern void diagnostic_initialize (diagnostic_context *, int);
- extern void diagnostic_color_init (diagnostic_context *, int value = -1);
- extern void diagnostic_finish (diagnostic_context *);
- extern void diagnostic_report_current_module (diagnostic_context *, location_t);
- extern void diagnostic_show_locus (diagnostic_context *, const diagnostic_info *);
- extern diagnostic_t diagnostic_classify_diagnostic (diagnostic_context *,
- int ,
- diagnostic_t ,
- location_t);
- extern void diagnostic_push_diagnostics (diagnostic_context *, location_t);
- extern void diagnostic_pop_diagnostics (diagnostic_context *, location_t);
- extern bool diagnostic_report_diagnostic (diagnostic_context *,
- diagnostic_info *);
- #ifdef ATTRIBUTE_GCC_DIAG
- extern void diagnostic_set_info (diagnostic_info *, const char *, va_list *,
- location_t, diagnostic_t) ATTRIBUTE_GCC_DIAG(2,0);
- extern void diagnostic_set_info_translated (diagnostic_info *, const char *,
- va_list *, location_t,
- diagnostic_t)
- ATTRIBUTE_GCC_DIAG(2,0);
- extern void diagnostic_append_note (diagnostic_context *, location_t,
- const char *, ...) ATTRIBUTE_GCC_DIAG(3,4);
- #endif
- extern char *diagnostic_build_prefix (diagnostic_context *, const diagnostic_info *);
- void default_diagnostic_starter (diagnostic_context *, diagnostic_info *);
- void default_diagnostic_finalizer (diagnostic_context *, diagnostic_info *);
- void diagnostic_set_caret_max_width (diagnostic_context *context, int value);
- void diagnostic_action_after_output (diagnostic_context *, diagnostic_t);
- void diagnostic_file_cache_fini (void);
- int get_terminal_width (void);
- static inline expanded_location
- diagnostic_expand_location (const diagnostic_info * diagnostic)
- {
- expanded_location s
- = expand_location_to_spelling_point (diagnostic->location);
- if (diagnostic->override_column)
- s.column = diagnostic->override_column;
- return s;
- }
- extern char *file_name_as_prefix (diagnostic_context *, const char *);
- extern char *build_message_string (const char *, ...) ATTRIBUTE_PRINTF_1;
- #endif
|