GCC Middle and Back End API Reference
diagnostic.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "version.h"
#include "demangle.h"
#include "intl.h"
#include "backtrace.h"
#include "diagnostic.h"
#include "diagnostic-color.h"
#include "diagnostic-url.h"
#include "diagnostic-metadata.h"
#include "diagnostic-path.h"
#include "diagnostic-client-data-hooks.h"
#include "diagnostic-diagram.h"
#include "edit-context.h"
#include "selftest.h"
#include "selftest-diagnostic.h"
#include "opts.h"
#include "cpplib.h"
#include "text-art/theme.h"
#include "pretty-print-urlifier.h"
#include "diagnostic.def"
Include dependency graph for diagnostic.cc:

Macros

#define INCLUDE_VECTOR
 
#define pedantic_warning_kind(DC)    ((DC)->m_pedantic_errors ? DK_ERROR : DK_WARNING)
 
#define permissive_error_kind(DC)   ((DC)->m_permissive ? DK_WARNING : DK_ERROR)
 
#define permissive_error_option(DC)   ((DC)->m_opt_permissive)
 
#define DEFINE_DIAGNOSTIC_KIND(K, T, C)   (C),
 
#define DEFINE_DIAGNOSTIC_KIND(K, T, C)   (T),
 

Functions

static bool diagnostic_impl (rich_location *, const diagnostic_metadata *, int, const char *, va_list *, diagnostic_t) ATTRIBUTE_GCC_DIAG(4
 
static bool static bool diagnostic_n_impl (rich_location *, const diagnostic_metadata *, int, unsigned HOST_WIDE_INT, const char *, const char *, va_list *, diagnostic_t) ATTRIBUTE_GCC_DIAG(6
 
static bool static bool static void real_abort (void) ATTRIBUTE_NORETURN
 
charbuild_message_string (const char *msg,...)
 
charfile_name_as_prefix (diagnostic_context *context, const char *f)
 
int get_terminal_width (void)
 
void diagnostic_set_caret_max_width (diagnostic_context *context, int value)
 
void diagnostic_set_info_translated (diagnostic_info *diagnostic, const char *msg, va_list *args, rich_location *richloc, diagnostic_t kind)
 
void diagnostic_set_info (diagnostic_info *diagnostic, const char *gmsgid, va_list *args, rich_location *richloc, diagnostic_t kind)
 
const chardiagnostic_get_color_for_kind (diagnostic_t kind)
 
static int convert_column_unit (file_cache &fc, enum diagnostics_column_unit column_unit, int tabstop, expanded_location s)
 
static const charmaybe_line_and_column (int line, int col)
 
chardiagnostic_build_prefix (diagnostic_context *context, const diagnostic_info *diagnostic)
 
static int bt_callback (void *data, uintptr_t pc, const char *filename, int lineno, const char *function)
 
static void bt_err_callback (void *data, const char *msg, int errnum)
 
void default_diagnostic_starter (diagnostic_context *context, const diagnostic_info *diagnostic)
 
void default_diagnostic_start_span_fn (diagnostic_context *context, expanded_location exploc)
 
void default_diagnostic_finalizer (diagnostic_context *context, const diagnostic_info *diagnostic, diagnostic_t)
 
static void print_escaped_string (pretty_printer *pp, const char *text)
 
static void print_parseable_fixits (file_cache &fc, pretty_printer *pp, rich_location *richloc, enum diagnostics_column_unit column_unit, int tabstop)
 
charget_cwe_url (int cwe)
 
int num_digits (int value)
 
const chartrim_filename (const char *name)
 
void verbatim (const char *gmsgid,...)
 
void diagnostic_append_note (diagnostic_context *context, location_t location, const char *gmsgid,...)
 
bool emit_diagnostic (diagnostic_t kind, location_t location, int opt, const char *gmsgid,...)
 
bool emit_diagnostic (diagnostic_t kind, rich_location *richloc, int opt, const char *gmsgid,...)
 
bool emit_diagnostic_valist (diagnostic_t kind, location_t location, int opt, const char *gmsgid, va_list *ap)
 
bool emit_diagnostic_valist_meta (diagnostic_t kind, rich_location *richloc, const diagnostic_metadata *metadata, int opt, const char *gmsgid, va_list *ap)
 
void inform (location_t location, const char *gmsgid,...)
 
void inform (rich_location *richloc, const char *gmsgid,...)
 
void inform_n (location_t location, unsigned HOST_WIDE_INT n, const char *singular_gmsgid, const char *plural_gmsgid,...)
 
bool warning (int opt, const char *gmsgid,...)
 
bool warning_at (location_t location, int opt, const char *gmsgid,...)
 
bool warning_at (rich_location *richloc, int opt, const char *gmsgid,...)
 
bool warning_meta (rich_location *richloc, const diagnostic_metadata &metadata, int opt, const char *gmsgid,...)
 
bool warning_n (rich_location *richloc, int opt, unsigned HOST_WIDE_INT n, const char *singular_gmsgid, const char *plural_gmsgid,...)
 
bool warning_n (location_t location, int opt, unsigned HOST_WIDE_INT n, const char *singular_gmsgid, const char *plural_gmsgid,...)
 
bool pedwarn (location_t location, int opt, const char *gmsgid,...)
 
bool pedwarn (rich_location *richloc, int opt, const char *gmsgid,...)
 
bool permerror (location_t location, const char *gmsgid,...)
 
bool permerror (rich_location *richloc, const char *gmsgid,...)
 
bool permerror_opt (location_t location, int opt, const char *gmsgid,...)
 
bool permerror_opt (rich_location *richloc, int opt, const char *gmsgid,...)
 
void error (const char *gmsgid,...)
 
void error_n (location_t location, unsigned HOST_WIDE_INT n, const char *singular_gmsgid, const char *plural_gmsgid,...)
 
void error_at (location_t loc, const char *gmsgid,...)
 
void error_at (rich_location *richloc, const char *gmsgid,...)
 
void error_meta (rich_location *richloc, const diagnostic_metadata &metadata, const char *gmsgid,...)
 
void sorry (const char *gmsgid,...)
 
void sorry_at (location_t loc, const char *gmsgid,...)
 
bool seen_error (void)
 
void fatal_error (location_t loc, const char *gmsgid,...)
 
void internal_error (const char *gmsgid,...)
 
void internal_error_no_backtrace (const char *gmsgid,...)
 
void fnotice (FILE *file, const char *cmsgid,...)
 
void fancy_abort (const char *file, int line, const char *function)
 
void diagnostic_output_format_init (diagnostic_context *context, const char *base_file_name, enum diagnostics_output_format format, bool json_formatting)
 
DEBUG_FUNCTION void debug (diagnostic_path *path)
 

Variables

const charprogname
 
static diagnostic_context global_diagnostic_context
 
diagnostic_contextglobal_dc = &global_diagnostic_context
 
static const char *const diagnostic_kind_color []
 
static const char *const diagnostic_kind_text []
 
static const char *const bt_stop []
 

Macro Definition Documentation

◆ DEFINE_DIAGNOSTIC_KIND [1/2]

#define DEFINE_DIAGNOSTIC_KIND ( K,
T,
C )   (C),

◆ DEFINE_DIAGNOSTIC_KIND [2/2]

#define DEFINE_DIAGNOSTIC_KIND ( K,
T,
C )   (T),

◆ INCLUDE_VECTOR

#define INCLUDE_VECTOR
Language-independent diagnostic subroutines for the GNU Compiler Collection
   Copyright (C) 1999-2024 Free Software Foundation, Inc.
   Contributed by Gabriel Dos Reis <gdr@codesourcery.com>

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.   
This file implements the language independent aspect of diagnostic
message module.   

◆ pedantic_warning_kind

#define pedantic_warning_kind ( DC)     ((DC)->m_pedantic_errors ? DK_ERROR : DK_WARNING)
Disable warnings about quoting issues in the pp_xxx calls below
that (intentionally) don't follow GCC diagnostic conventions.   

Referenced by diagnostic_context::report_diagnostic().

◆ permissive_error_kind

#define permissive_error_kind ( DC)    ((DC)->m_permissive ? DK_WARNING : DK_ERROR)

Referenced by diagnostic_impl().

◆ permissive_error_option

#define permissive_error_option ( DC)    ((DC)->m_opt_permissive)

Function Documentation

◆ bt_callback()

static int bt_callback ( void * data,
uintptr_t pc,
const char * filename,
int lineno,
const char * function )
static
A callback function passed to the backtrace_full function.   

References bt_stop, free(), ggc_alloc(), i, and NULL.

Referenced by diagnostic_context::action_after_output(), and fancy_abort().

◆ bt_err_callback()

static void bt_err_callback ( void * data,
const char * msg,
int errnum )
static
A callback function passed to the backtrace_full function.  This is
called if backtrace_full has an error.   

References ggc_alloc(), and msg.

Referenced by diagnostic_context::action_after_output(), and fancy_abort().

◆ build_message_string()

char * build_message_string ( const char * msg,
... )
Return a malloc'd string containing MSG formatted a la printf.  The
caller is responsible for freeing the memory.   

References ap, ggc_alloc(), and msg.

Referenced by diagnostic_build_prefix(), file_name_as_prefix(), and diagnostic_context::get_location_text().

◆ convert_column_unit()

static int convert_column_unit ( file_cache & fc,
enum diagnostics_column_unit column_unit,
int tabstop,
expanded_location s )
static
Given an expanded_location, convert the column (which is in 1-based bytes)
to the requested units, without converting the origin.
Return -1 if the column is invalid (<= 0).   

References DIAGNOSTICS_COLUMN_UNIT_BYTE, DIAGNOSTICS_COLUMN_UNIT_DISPLAY, gcc_unreachable, ggc_alloc(), and location_compute_display_column().

Referenced by diagnostic_context::converted_column(), and print_parseable_fixits().

◆ debug()

Print PATH by emitting a dummy "note" associated with it.   

References inform(), line_table, and UNKNOWN_LOCATION.

◆ default_diagnostic_finalizer()

◆ default_diagnostic_start_span_fn()

◆ default_diagnostic_starter()

◆ diagnostic_append_note()

◆ diagnostic_build_prefix()

char * diagnostic_build_prefix ( diagnostic_context * context,
const diagnostic_info * diagnostic )
Return a malloc'd string describing a location and the severity of the
diagnostic, e.g. "foo.c:42:10: error: ".  The caller is responsible for
freeing the memory.   

References _, build_message_string(), colorize_start(), colorize_stop(), diagnostic_expand_location(), diagnostic_kind_color, diagnostic_kind_text, DK_LAST_DIAGNOSTIC_KIND, gcc_assert, diagnostic_context::get_location_text(), ggc_alloc(), pp_show_color, and diagnostic_context::printer.

Referenced by default_diagnostic_starter(), default_tree_diagnostic_starter(), and diagnostic_append_note().

◆ diagnostic_get_color_for_kind()

const char * diagnostic_get_color_for_kind ( diagnostic_t kind)
Get a color name for diagnostics of type KIND
Result could be NULL.   

References diagnostic_kind_color.

◆ diagnostic_impl()

static bool diagnostic_impl ( rich_location * richloc,
const diagnostic_metadata * metadata,
int opt,
const char * gmsgid,
va_list * ap,
diagnostic_t kind )
static
Prototypes.   
Implement emit_diagnostic, inform, warning, warning_at, pedwarn,
permerror, error, error_at, error_at, sorry, fatal_error, internal_error,
and internal_error_no_backtrace, as documented and defined below.   

References ap, diagnostic_set_info(), ggc_alloc(), global_dc, permissive_error_kind, permissive_error_option, and diagnostic_context::report_diagnostic().

Referenced by emit_diagnostic(), emit_diagnostic(), emit_diagnostic_valist(), emit_diagnostic_valist_meta(), error(), error_at(), error_at(), error_meta(), fatal_error(), inform(), inform(), internal_error(), internal_error_no_backtrace(), pedwarn(), pedwarn(), permerror(), permerror(), permerror_opt(), permerror_opt(), sorry(), sorry_at(), warning(), warning_at(), warning_at(), and warning_meta().

◆ diagnostic_n_impl()

static bool diagnostic_n_impl ( rich_location * richloc,
const diagnostic_metadata * metadata,
int opt,
unsigned HOST_WIDE_INT n,
const char * singular_gmsgid,
const char * plural_gmsgid,
va_list * ap,
diagnostic_t kind )
static
Implement inform_n, warning_n, and error_n, as documented and
defined below.   

References ap, diagnostic_set_info_translated(), ggc_alloc(), global_dc, ngettext, diagnostic_context::report_diagnostic(), and ULONG_MAX.

Referenced by error_n(), inform_n(), warning_n(), and warning_n().

◆ diagnostic_output_format_init()

◆ diagnostic_set_caret_max_width()

◆ diagnostic_set_info()

void diagnostic_set_info ( diagnostic_info * diagnostic,
const char * gmsgid,
va_list * args,
rich_location * richloc,
diagnostic_t kind )
Initialize DIAGNOSTIC, where the message GMSGID has not yet been
translated.   

References _, diagnostic_set_info_translated(), gcc_assert, and ggc_alloc().

Referenced by diagnostic_append_note(), diagnostic_for_asm(), diagnostic_impl(), and format_string_diagnostic_t::emit_warning_n_va().

◆ diagnostic_set_info_translated()

void diagnostic_set_info_translated ( diagnostic_info * diagnostic,
const char * msg,
va_list * args,
rich_location * richloc,
diagnostic_t kind )
Initialize DIAGNOSTIC, where the message MSG has already been
translated.   

References errno, gcc_assert, ggc_alloc(), msg, and NULL.

Referenced by diagnostic_n_impl(), diagnostic_set_info(), and format_string_diagnostic_t::emit_warning_n_va().

◆ emit_diagnostic() [1/2]

bool emit_diagnostic ( diagnostic_t kind,
location_t location,
int opt,
const char * gmsgid,
... )
Wrapper around diagnostic_impl taking a variable argument list.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ emit_diagnostic() [2/2]

bool emit_diagnostic ( diagnostic_t kind,
rich_location * richloc,
int opt,
const char * gmsgid,
... )
As above, but for rich_location *.   

References ap, diagnostic_impl(), ggc_alloc(), and NULL.

◆ emit_diagnostic_valist()

bool emit_diagnostic_valist ( diagnostic_t kind,
location_t location,
int opt,
const char * gmsgid,
va_list * ap )
Wrapper around diagnostic_impl taking a va_list parameter.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ emit_diagnostic_valist_meta()

bool emit_diagnostic_valist_meta ( diagnostic_t kind,
rich_location * richloc,
const diagnostic_metadata * metadata,
int opt,
const char * gmsgid,
va_list * ap )
As above, but with rich_location and metadata.   

References ap, diagnostic_impl(), and ggc_alloc().

◆ error()

void error ( const char * gmsgid,
... )
A hard error: the code is definitely ill-formed, and an object file
will not be produced.   

References ap, diagnostic_impl(), ggc_alloc(), input_location, line_table, and NULL.

◆ error_at() [1/2]

void error_at ( location_t loc,
const char * gmsgid,
... )
Same as above, but use location LOC instead of input_location.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ error_at() [2/2]

void error_at ( rich_location * richloc,
const char * gmsgid,
... )
Same as above, but use RICH_LOC.   

References ap, diagnostic_impl(), gcc_assert, ggc_alloc(), and NULL.

◆ error_meta()

void error_meta ( rich_location * richloc,
const diagnostic_metadata & metadata,
const char * gmsgid,
... )
Same as above, but with metadata.   

References ap, diagnostic_impl(), gcc_assert, and ggc_alloc().

◆ error_n()

void error_n ( location_t location,
unsigned HOST_WIDE_INT n,
const char * singular_gmsgid,
const char * plural_gmsgid,
... )
A hard error: the code is definitely ill-formed, and an object file
will not be produced.   

References ap, diagnostic_n_impl(), ggc_alloc(), line_table, and NULL.

◆ fancy_abort()

void fancy_abort ( const char * file,
int line,
const char * function )
Report an internal compiler error in a friendly manner.  This is
the function that gets called upon use of abort() in the source
code generally, thanks to a special macro.   

References bt_callback(), bt_err_callback(), count, diagnostic_kind_text, fnotice(), fputc(), ggc_alloc(), global_dc, internal_error(), NULL, diagnostic_context::printer, real_abort(), and trim_filename().

Referenced by _fatal_insn().

◆ fatal_error()

void fatal_error ( location_t loc,
const char * gmsgid,
... )
An error which is severe enough that we make no attempt to
continue.  Do not use this for internal consistency checks; that's
internal_error.  Use of this function should be rare.   

References ap, diagnostic_impl(), gcc_unreachable, ggc_alloc(), line_table, and NULL.

◆ file_name_as_prefix()

char * file_name_as_prefix ( diagnostic_context * context,
const char * f )
Same as diagnostic_build_prefix, but only the source FILE is given.   

References build_message_string(), colorize_start(), colorize_stop(), ggc_alloc(), pp_show_color, and diagnostic_context::printer.

Referenced by lhd_print_error_function().

◆ fnotice()

◆ get_cwe_url()

char * get_cwe_url ( int cwe)
Generate a URL string describing CWE.  The caller is responsible for
freeing the string.   

References ggc_alloc().

Referenced by sarif_builder::make_reporting_descriptor_object_for_cwe_id(), and diagnostic_context::print_any_cwe().

◆ get_terminal_width()

int get_terminal_width ( void )
Return the value of the getenv("COLUMNS") as an integer. If the
value is not set to a positive integer, use ioctl to get the
terminal width. If it fails, return INT_MAX.   

References ggc_alloc(), INT_MAX, and NULL.

Referenced by diagnostic_set_caret_max_width(), and print_specific_help().

◆ inform() [1/2]

void inform ( location_t location,
const char * gmsgid,
... )
An informative note at LOCATION.  Use this for additional details on an error
message.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

Referenced by debug().

◆ inform() [2/2]

void inform ( rich_location * richloc,
const char * gmsgid,
... )
Same as "inform" above, but at RICHLOC.   

References ap, diagnostic_impl(), gcc_assert, ggc_alloc(), and NULL.

◆ inform_n()

void inform_n ( location_t location,
unsigned HOST_WIDE_INT n,
const char * singular_gmsgid,
const char * plural_gmsgid,
... )
An informative note at LOCATION.  Use this for additional details on an
error message.   

References ap, diagnostic_n_impl(), ggc_alloc(), line_table, and NULL.

◆ internal_error()

void internal_error ( const char * gmsgid,
... )
An internal consistency check has failed.  We make no attempt to
continue.   

References ap, diagnostic_impl(), gcc_unreachable, ggc_alloc(), input_location, line_table, and NULL.

◆ internal_error_no_backtrace()

void internal_error_no_backtrace ( const char * gmsgid,
... )
Like internal_error, but no backtrace will be printed.  Used when
the internal error does not happen at the current location, but happened
somewhere else.   

References ap, diagnostic_impl(), gcc_unreachable, ggc_alloc(), input_location, line_table, and NULL.

◆ maybe_line_and_column()

static const char * maybe_line_and_column ( int line,
int col )
static
Return a formatted line and column ':%line:%column'.  Elided if
line == 0 or col < 0.  (A column of 0 may be valid due to the
-fdiagnostics-column-origin option.)
The result is a statically allocated buffer.   

References gcc_checking_assert, and ggc_alloc().

Referenced by diagnostic_context::get_location_text(), and diagnostic_context::report_current_module().

◆ num_digits()

int num_digits ( int value)
Get the number of digits in the decimal representation of VALUE.   

References gcc_assert, and ggc_alloc().

Referenced by dump_location_info().

◆ pedwarn() [1/2]

bool pedwarn ( location_t location,
int opt,
const char * gmsgid,
... )
A "pedantic" warning at LOCATION: issues a warning unless
-pedantic-errors was given on the command line, in which case it
issues an error.  Use this for diagnostics required by the relevant
language standard, if you have chosen not to make them errors.

Note that these diagnostics are issued independent of the setting
of the -Wpedantic command-line switch.  To get a warning enabled
only with that switch, use either "if (pedantic) pedwarn
(OPT_Wpedantic,...)" or just "pedwarn (OPT_Wpedantic,..)".  To get a
pedwarn independently of the -Wpedantic switch use "pedwarn (0,...)".

Returns true if the warning was printed, false if it was inhibited.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ pedwarn() [2/2]

bool pedwarn ( rich_location * richloc,
int opt,
const char * gmsgid,
... )
Same as pedwarn above, but using RICHLOC.   

References ap, diagnostic_impl(), gcc_assert, ggc_alloc(), and NULL.

◆ permerror() [1/2]

bool permerror ( location_t location,
const char * gmsgid,
... )
A "permissive" error at LOCATION: issues an error unless
-fpermissive was given on the command line, in which case it issues
a warning.  Use this for things that really should be errors but we
want to support legacy code.

Returns true if the warning was printed, false if it was inhibited.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ permerror() [2/2]

bool permerror ( rich_location * richloc,
const char * gmsgid,
... )
Same as "permerror" above, but at RICHLOC.   

References ap, diagnostic_impl(), gcc_assert, ggc_alloc(), and NULL.

◆ permerror_opt() [1/2]

bool permerror_opt ( location_t location,
int opt,
const char * gmsgid,
... )
Similar to the above, but controlled by a flag other than -fpermissive.
As above, an error by default or a warning with -fpermissive, but this
diagnostic can also be downgraded by -Wno-error=opt.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ permerror_opt() [2/2]

bool permerror_opt ( rich_location * richloc,
int opt,
const char * gmsgid,
... )
Same as "permerror" above, but at RICHLOC.   

References ap, diagnostic_impl(), gcc_assert, ggc_alloc(), and NULL.

◆ print_escaped_string()

static void print_escaped_string ( pretty_printer * pp,
const char * text )
static
Helper function for print_parseable_fixits.  Print TEXT to PP, obeying the
escaping rules for -fdiagnostics-parseable-fixits.   

References gcc_assert, ggc_alloc(), pp_character(), pp_printf(), and pp_string().

Referenced by print_parseable_fixits().

◆ print_parseable_fixits()

static void print_parseable_fixits ( file_cache & fc,
pretty_printer * pp,
rich_location * richloc,
enum diagnostics_column_unit column_unit,
int tabstop )
static
Implementation of -fdiagnostics-parseable-fixits and
GCC_EXTRA_DIAGNOSTIC_OUTPUT.
Print a machine-parseable version of all fixits in RICHLOC to PP,
using COLUMN_UNIT to express columns.
Use TABSTOP when handling DIAGNOSTICS_COLUMN_UNIT_DISPLAY.   

References convert_column_unit(), expand_location(), gcc_assert, ggc_alloc(), i, NULL, pp_newline(), pp_printf(), pp_set_prefix(), pp_string(), pp_take_prefix(), and print_escaped_string().

Referenced by diagnostic_context::report_diagnostic().

◆ real_abort()

static void real_abort ( void )
static
Really call the system 'abort'.  This has to go right at the end of
this file, so that there are no functions after it that call abort
and get the system abort instead of our macro.   

References abort.

Referenced by diagnostic_context::action_after_output(), diagnostic_context::error_recursion(), and fancy_abort().

◆ seen_error()

◆ sorry()

void sorry ( const char * gmsgid,
... )
"Sorry, not implemented."  Use for a language feature which is
required by the relevant specification but not implemented by GCC.
An object file will not be produced.   

References ap, diagnostic_impl(), ggc_alloc(), input_location, line_table, and NULL.

◆ sorry_at()

void sorry_at ( location_t loc,
const char * gmsgid,
... )
Same as above, but use location LOC instead of input_location.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ trim_filename()

const char * trim_filename ( const char * name)
Given a partial pathname as input, return another pathname that
shares no directory elements with the pathname of __FILE__.  This
is used by fancy_abort() to print `internal compiler error in expr.cc'
instead of `internal compiler error in ../../GCC/gcc/expr.cc'.   

◆ verbatim()

void verbatim ( const char * gmsgid,
... )
Standard error reporting routines in increasing order of severity.
All of these take arguments like printf.   
Text to be emitted verbatim to the error message stream; this
produces no prefix and disables line-wrapping.  Use rarely.   

References _, ap, errno, ggc_alloc(), global_dc, pp_format_verbatim(), pp_newline_and_flush(), and diagnostic_context::printer.

◆ warning()

bool warning ( int opt,
const char * gmsgid,
... )
A warning at INPUT_LOCATION.  Use this for code which is correct according
to the relevant language specification but is likely to be buggy anyway.
Returns true if the warning was printed, false if it was inhibited.   

References ap, diagnostic_impl(), ggc_alloc(), input_location, line_table, and NULL.

◆ warning_at() [1/2]

bool warning_at ( location_t location,
int opt,
const char * gmsgid,
... )
A warning at LOCATION.  Use this for code which is correct according to the
relevant language specification but is likely to be buggy anyway.
Returns true if the warning was printed, false if it was inhibited.   

References ap, diagnostic_impl(), ggc_alloc(), line_table, and NULL.

◆ warning_at() [2/2]

bool warning_at ( rich_location * richloc,
int opt,
const char * gmsgid,
... )
Same as "warning at" above, but using RICHLOC.   

References ap, diagnostic_impl(), gcc_assert, ggc_alloc(), and NULL.

◆ warning_meta()

bool warning_meta ( rich_location * richloc,
const diagnostic_metadata & metadata,
int opt,
const char * gmsgid,
... )
Same as "warning at" above, but using METADATA.   

References ap, diagnostic_impl(), gcc_assert, and ggc_alloc().

◆ warning_n() [1/2]

bool warning_n ( location_t location,
int opt,
unsigned HOST_WIDE_INT n,
const char * singular_gmsgid,
const char * plural_gmsgid,
... )
A warning at LOCATION.  Use this for code which is correct according to the
relevant language specification but is likely to be buggy anyway.
Returns true if the warning was printed, false if it was inhibited.   

References ap, diagnostic_n_impl(), ggc_alloc(), line_table, and NULL.

◆ warning_n() [2/2]

bool warning_n ( rich_location * richloc,
int opt,
unsigned HOST_WIDE_INT n,
const char * singular_gmsgid,
const char * plural_gmsgid,
... )
Same as warning_n plural variant below, but using RICHLOC.   

References ap, diagnostic_n_impl(), gcc_assert, ggc_alloc(), and NULL.

Variable Documentation

◆ bt_stop

const char* const bt_stop[]
static
Initial value:
=
{
"main",
"toplev::main",
"execute_one_pass",
"compile_file",
}
Functions at which to stop the backtrace print.  It's not
particularly helpful to print the callers of these functions.   

Referenced by bt_callback().

◆ diagnostic_kind_color

const char* const diagnostic_kind_color[]
static
Initial value:
= {
#define DEFINE_DIAGNOSTIC_KIND(K, T, C)
}
#define NULL
Definition system.h:50

Referenced by diagnostic_build_prefix(), diagnostic_get_color_for_kind(), diagnostic_context::print_any_cwe(), diagnostic_context::print_any_rules(), and diagnostic_context::print_option_information().

◆ diagnostic_kind_text

const char* const diagnostic_kind_text[]
static
Initial value:
= {
#define DEFINE_DIAGNOSTIC_KIND(K, T, C)
"must-not-happen"
}

Referenced by diagnostic_build_prefix(), fancy_abort(), make_rule_id_for_diagnostic_kind(), and json_output_format::on_end_diagnostic().

◆ global_dc

◆ global_diagnostic_context

diagnostic_context global_diagnostic_context
static
A diagnostic_context surrogate for stderr.   

◆ progname

const char* progname
Name of program invoked, sans directories.