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