Richi/Jakub: OK if I apply these patches to trunk now, or should I wait
until next stage 1?

https://gcc.gnu.org/pipermail/gcc-patches/2026-February/708500.html

* successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
* verified make check-gcc RUNTESTFLAGS="aarch64-json-tunings.exp=*"
with --target=aarch64-unknown-linux-gnu
* hand-verified SARIF and HTML output
* hand-verified that valgrind is clean

I believe this has been approved by the aarch64 maintainers (albeit
needing a regeneration of aarch64-json-tunings-parser-generated.inc),
and Soumya just posted another patch in this area that mentioned
wanting to use the diagnostic improvements:
https://gcc.gnu.org/pipermail/gcc-patches/2026-February/709295.html


Thanks
Dave

On Sat, 2026-02-14 at 10:51 -0500, David Malcolm wrote:
> I added JSON parsing code in GCC 15 to support sarif-replay.
> 
> In GCC 16 the aarch64 target has gained the ability to load tuning
> information in JSON form via -muser-provided-CPU=FILENAME.json (see
> r16-5615-g59f37983222d86 through r16-5619-ga0b8cc4a473e1e).
> 
> The UX is currently rather poor for malformed and invalid inputs to
> -muser-provided-CPU=:
> 
> $ ./xgcc -B. -S test.c -muser-provided-CPU=malformed.json
> cc1: error: error parsing JSON data: expected ':'; got number
> 
> $ ./xgcc -B. -S test.c -muser-provided-CPU=unsigned-3.json
> cc1: warning: JSON tuning file does not contain version information;
> compatibility cannot be verified
> cc1: error: key ‘tune_params.sve_width’ value 5000000000 is out of
> range for ‘uint’ type [0, 4294967295]
> cc1: error: validation failed for the provided JSON data
> 
> In particular it doesn't show location information within the JSON
> file.
> 
> A further JSON input to GCC is being considered via patch
>   "fmv: Add -ftarget-clones-table option support"
>    
> https://gcc.gnu.org/pipermail/gcc-patches/2026-February/708264.html
> and that patch has similar issues with the diagnostics it emits on
> bad
> input JSON.
> 
> This patch kit:
> * moves some support code out from libgdiagnostics and sarif-replay
> so
>   that it can be used with global_dc,
> * uses that to introduce a new json-diagnostic.{cc,h} to make it easy
> to
>   emit JSON diagnostics with location information from within GCC
> * updates aarch64's -muser-provided-CPU= implementation to improve
> the
>   error handling.
> 
> With this patch, the above is improved to:
> 
> $ ./xgcc -B. -S test.c -muser-provided-CPU=malformed.json
> malformed.json:3:17: error: error parsing JSON data: expected ':';
> got number
>     3 |     "sve_width" 128
>       |                 ^~~
> 
> $ ./xgcc -B. -S test.c -muser-provided-CPU=unsigned-3.json
> cc1: warning: JSON tuning file does not contain version information;
> compatibility cannot be verified
> unsigned-3.json: In JSON value ‘/tune_params/sve_width’
> unsigned-3.json:3:18: error: key ‘tune_params.sve_width’ value
> 5000000000 is out of range for ‘uint’ type [0, 4294967295]
>     3 |     "sve_width": 5000000000
>       |                  ^~~~~~~~~~
> cc1: error: validation failed for the provided JSON data
> 
> showing file:line:column of the problematic JSON, quoting and
> underlining the pertinent part of the input, and showing the
> JSON Pointer of the relevant value, if there is one.  This data is
> also
> now captured by SARIF and HTML diagnostic sinks.
> 
> A similar approach could be adopted for the -ftarget-clones-table
> patch to improve its diagnostics for bad input JSON.
> 
> The option -muser-provided-CPU= is new in GCC 16, but apparently is
> intended purely for GCC developers.  I'm not sure whether the fmv
> json
> patch is aimed at GCC 16 or GCC 17, but it appears to be aimed at
> end-users.
> 
> I'd like to push this to trunk now, but I appreciate that it's
> non-trivial and not technically a fix of a regression, but it does
> add
> UX polish.
> 
> I can self-approve the diagnostics/json refactorings.
> 
> aarch64 maintainers: are the aarch64 changes OK for trunk, either in
> stage 4 or next stage 1?
> 
> Release managers: is this OK for stage 4, or should this wait until
> next
> stage 1?
> 
> Thanks
> Dave
> 
> David Malcolm (5):
>   diagnostics: use label_text for logical_location strings
>   diagnostics: split out physical_location_maker from libgdiagnostics
>   json: split out replayer_location_map from libsarifreplay.cc
>   Add json-diagnostic.{cc,h}
>   aarch64: improve diagnostics for bogus JSON tuning inputs
> [PR124094]
> 
>  gcc/Makefile.in                               |   3 +-
>  .../aarch64-generate-json-tuning-routines.py  |  17 +-
>  .../aarch64-json-tunings-parser-generated.inc | 428 +++++++++-------
> --
>  .../aarch64/aarch64-json-tunings-parser.cc    | 279 ++++++++----
>  gcc/diagnostics/client-data-hooks.h           |  53 +++
>  gcc/diagnostics/context.cc                    |   5 +-
>  gcc/diagnostics/context.h                     |   4 +-
>  gcc/diagnostics/html-sink.cc                  |  11 +-
>  gcc/diagnostics/logical-locations.h           |   6 +-
>  gcc/diagnostics/physical-location-maker.cc    |  75 +++
>  gcc/diagnostics/physical-location-maker.h     |  60 +++
>  gcc/diagnostics/sarif-sink.cc                 |  24 +-
>  gcc/diagnostics/selftest-logical-locations.cc |  18 +-
>  gcc/diagnostics/selftest-logical-locations.h  |   6 +-
>  gcc/diagnostics/state-graphs-to-dot.cc        |  15 +-
>  gcc/json-diagnostic.cc                        | 374 +++++++++++++++
>  gcc/json-diagnostic.h                         |  74 +++
>  gcc/json-parsing.cc                           |   1 +
>  gcc/json-parsing.h                            |  24 +
>  gcc/libgdiagnostics.cc                        |  62 +--
>  gcc/libsarifreplay.cc                         |  23 +-
>  .../aarch64/aarch64-json-tunings/boolean-2.c  |  12 +-
>  .../aarch64-json-tunings/empty-brackets.c     |   9 +-
>  .../aarch64/aarch64-json-tunings/enum-2.c     |  19 +-
>  .../aarch64/aarch64-json-tunings/integer-2.c  |  14 +-
>  .../aarch64/aarch64-json-tunings/integer-3.c  |  13 +-
>  .../aarch64/aarch64-json-tunings/malformed.c  |  11 +
>  .../aarch64-json-tunings/malformed.json       |   5 +
>  .../aarch64/aarch64-json-tunings/string-2.c   |  12 +-
>  .../aarch64-json-tunings/unidentified-key.c   |  12 +-
>  .../aarch64/aarch64-json-tunings/unsigned-2.c |  10 +-
>  .../aarch64/aarch64-json-tunings/unsigned-3.c |  10 +-
>  gcc/tree-logical-location.cc                  |  26 +-
>  gcc/tree-logical-location.h                   |   6 +-
>  34 files changed, 1275 insertions(+), 446 deletions(-)
>  create mode 100644 gcc/diagnostics/physical-location-maker.cc
>  create mode 100644 gcc/diagnostics/physical-location-maker.h
>  create mode 100644 gcc/json-diagnostic.cc
>  create mode 100644 gcc/json-diagnostic.h
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/aarch64-json-
> tunings/malformed.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/aarch64-json-
> tunings/malformed.json
> 

Reply via email to