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 "diagnostic-format.h"
#include "diagnostic-format-sarif.h"
#include "diagnostic-format-text.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 "logical-location.h"
#include "diagnostic-buffer.h"
#include "make-unique.h"
#include "diagnostic.def"
Include dependency graph for diagnostic.cc:

Macros

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

Functions

static void real_abort (void) ATTRIBUTE_NORETURN
 
char * build_message_string (const char *msg,...)
 
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 char * diagnostic_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)
 
const char * get_diagnostic_kind_text (diagnostic_t kind)
 
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_start_span_fn (const diagnostic_location_print_policy &loc_policy, pretty_printer *pp, expanded_location exploc)
 
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)
 
char * get_cwe_url (int cwe)
 
int num_digits (int value)
 
const char * trim_filename (const char *name)
 
void fancy_abort (const char *file, int line, const char *function)
 
void diagnostic_output_format_init (diagnostic_context &context, const char *main_input_filename_, const char *base_file_name, enum diagnostics_output_format format, bool json_formatting)
 

Variables

const char * progname
 
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 )
Value:
(C),

◆ DEFINE_DIAGNOSTIC_KIND [2/2]

#define DEFINE_DIAGNOSTIC_KIND ( K,
T,
C )
Value:
(T),
static struct token T
Definition gengtype-parse.cc:45

◆ 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.   

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(), i, and NULL.

Referenced by 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 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, and msg.

Referenced by diagnostic_text_output_format::build_prefix(), diagnostic_text_output_format::file_name_as_prefix(), and diagnostic_column_policy::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, and location_compute_display_column().

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

◆ default_diagnostic_start_span_fn()

◆ diagnostic_get_color_for_kind()

const char * diagnostic_get_color_for_kind ( diagnostic_t kind)

◆ 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(), and gcc_assert.

Referenced by diagnostic_text_output_format::append_note(), diagnostic_for_asm(), sink::emit(), 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, msg, and NULL.

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

◆ 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(), diagnostic_context::get_reference_printer(), global_dc, internal_error(), NULL, real_abort(), and trim_filename().

Referenced by _fatal_insn().

◆ get_cwe_url()

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

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

◆ get_diagnostic_kind_text()

const char * get_diagnostic_kind_text ( diagnostic_t kind)

◆ 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 INT_MAX, and NULL.

Referenced by diagnostic_set_caret_max_width(), and print_specific_help().

◆ num_digits()

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

References gcc_assert.

Referenced by dump_location_info().

◆ 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, 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, 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
Disable warnings about quoting issues in the pp_xxx calls below
that (intentionally) don't follow GCC diagnostic conventions.   
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().

◆ 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'.   

Referenced by fancy_abort().

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

◆ diagnostic_kind_text

const char* const diagnostic_kind_text[]
static

◆ progname

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