From: David Malcolm <dmalcolm@redhat.com>
To: gcc-patches@gcc.gnu.org, binutils@sourceware.org
Cc: Nick Clifton <nickc@redhat.com>,
Simon Sobisch <simonsobisch@gnu.org>,
David Malcolm <dmalcolm@redhat.com>
Subject: [PATCH/RFC] libdiagnostics: a shared library for emitting diagnostics
Date: Mon, 6 Nov 2023 17:29:56 -0500 [thread overview]
Message-ID: <20231106222959.2707741-1-dmalcolm@redhat.com> (raw)
It's fairly easy for tools to implement simple diagnostics
via fprintf of
FILE:LINE:COLUMN: error: message
to stderr, but as diagnostics get more featureful, using a shared
library makes sense.
This patch kit extends GCC to add a new "libdiagnostics" shared library
on the host, built around GCC's existing diagnostic-handling code, exposed
via a pure C API intended for client code that wants to emit GCC-style
diagnostics. It implements:
- quoting pertinent source code (with a cache)
- underlining points and ranges in the source code, possibly with labels
- emitting fix-it hints
- generating patches from fix-it hints
- SARIF output
The first patch (for GCC) shows libdiagnostic.h (the public header
file), along with examples of simple self-contained programs that
show various uses of the API.
The second patch (for GCC) is the work-in-progress implementation.
The third patch (for binutils) is an experiment at using the API
with gas.
Status: this is a rough prototype. I'm posting it now to get
feedback, both from GCC developers, and from projects that might make
use of this library (binutils? GNU Cobol? others?). The header
file has a "TODO" list at the end listing various known unfinished
aspects, and "known unknowns".
Thoughts?
David Malcolm (2):
libdiagnostics: header and examples
libdiagnostics: work-in-progress implementation
gcc/Makefile.in | 134 +-
gcc/configure | 2 +-
gcc/configure.ac | 2 +-
gcc/input.h | 2 +-
gcc/libdiagnostics.cc | 1124 +++++++++++++++++
gcc/libdiagnostics.h | 544 ++++++++
gcc/libdiagnostics.map | 57 +
.../libdiagnostics.dg/libdiagnostics.exp | 544 ++++++++
.../libdiagnostics.dg/test-error-with-note.c | 57 +
gcc/testsuite/libdiagnostics.dg/test-error.c | 49 +
.../libdiagnostics.dg/test-fix-it-hint.c | 48 +
.../libdiagnostics.dg/test-helpers.h | 29 +
.../libdiagnostics.dg/test-labelled-ranges.c | 52 +
.../libdiagnostics.dg/test-logical-location.c | 62 +
.../libdiagnostics.dg/test-metadata.c | 53 +
.../libdiagnostics.dg/test-multiple-lines.c | 58 +
.../test-note-with-fix-it-hint.c | 51 +
.../libdiagnostics.dg/test-warning.c | 52 +
.../test-write-sarif-to-file.c | 46 +
.../test-write-text-to-file.c | 47 +
20 files changed, 3008 insertions(+), 5 deletions(-)
create mode 100644 gcc/libdiagnostics.cc
create mode 100644 gcc/libdiagnostics.h
create mode 100644 gcc/libdiagnostics.map
create mode 100644 gcc/testsuite/libdiagnostics.dg/libdiagnostics.exp
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-error-with-note.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-error.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-fix-it-hint.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-helpers.h
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-labelled-ranges.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-logical-location.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-metadata.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-multiple-lines.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-note-with-fix-it-hint.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-warning.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-write-sarif-to-file.c
create mode 100644 gcc/testsuite/libdiagnostics.dg/test-write-text-to-file.c
--
2.26.3
next reply other threads:[~2023-11-06 22:30 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-06 22:29 David Malcolm [this message]
2023-11-06 22:29 ` [PATCH 1/2] libdiagnostics: header and examples David Malcolm
2023-11-06 22:29 ` [PATCH 2/2] libdiagnostics: work-in-progress implementation David Malcolm
2023-11-07 7:54 ` Simon Sobisch
2023-11-07 14:59 ` David Malcolm
2023-11-07 15:35 ` Simon Sobisch
2023-11-06 22:29 ` [PATCH] binutils: experimental use of libdiagnostics in gas David Malcolm
2023-11-07 7:04 ` Simon Sobisch
2023-11-07 14:51 ` David Malcolm
2023-11-07 9:21 ` Clément Chigot
2023-11-07 14:09 ` David Malcolm
2023-11-07 15:57 ` Clément Chigot
2023-11-07 16:18 ` David Malcolm
2023-11-07 10:03 ` Jan Beulich
2023-11-07 14:32 ` David Malcolm
2023-11-07 14:59 ` Jan Beulich
2023-11-21 22:20 ` [PATCH 0/6] v2 of libdiagnostics David Malcolm
2023-11-21 22:20 ` [PATCH 1/5] libdiagnostics v2: header and examples David Malcolm
2023-11-21 22:20 ` [PATCH 2/5] libdiagnostics v2: work-in-progress implementation David Malcolm
2023-11-21 22:20 ` [PATCH 3/5] libdiagnostics v2: add C++ wrapper API David Malcolm
2023-11-21 22:20 ` [PATCH 4/5] diagnostics: add diagnostic_context::get_location_text David Malcolm
2023-11-28 1:25 ` David Malcolm
2023-11-21 22:20 ` [PATCH 5/5] diagnostics: don't print annotation lines when there's no column info David Malcolm
2023-11-28 1:25 ` David Malcolm
2023-11-21 22:20 ` [PATCH] binutils: v2: experimental use of libdiagnostics in gas David Malcolm
2023-11-22 7:36 ` Jan Beulich
2023-11-21 22:35 ` [PATCH 0/6] v2 of libdiagnostics Simon Sobisch
2023-11-23 17:36 ` Pedro Alves
2024-01-27 23:28 ` Simon Sobisch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231106222959.2707741-1-dmalcolm@redhat.com \
--to=dmalcolm@redhat.com \
--cc=binutils@sourceware.org \
--cc=gcc-patches@gcc.gnu.org \
--cc=nickc@redhat.com \
--cc=simonsobisch@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).