mbox series

[pushed,00/16] Revamp of JSON/SARIF output

Message ID 20240724221824.585054-1-dmalcolm@redhat.com
Headers show
Series Revamp of JSON/SARIF output | expand

Message

David Malcolm July 24, 2024, 10:18 p.m. UTC
The following patch kit overhauls various aspects of JSON/SARIF output:

* patch 1: adds a simpler json::value::dump () method to make it easier
  to debug JSON-handling code

* patches 2-9 are cleanups/refactorings of the json-handling code and
  the JSON/SARIF output formats with no functional change intended.
  Among other things, they make it more type-safe (useful when enforcing
  a schema), and use std::unique_ptr in many places to indicate
  ownership.

* patches 10-16: add new functionality to our SARIF output whilst
  building out selftest coverage for it.

See the individual patches for more details.

Lightly tested with valgrind.

Successfully bootstrapped with GCC 4.8.5 on
powerpc64le-unknown-linux-gnu (cfarm135).

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.

Successful run of analyzer integration tests on x86_64-pc-linux-gnu.

Pushed to trunk as r15-2278-g6baa26c3d6ceec through
r15-2293-g142003df61b45b.

David Malcolm (16):
  json: add dump overload for easier debugging
  json: add array::append_string
  analyzer: reduce use of naked "new" for json dumps
  gcov: reduce use of naked "new" for json output
  diagnostics: SARIF output: add sarif_object subclasses throughout
  diagnostics: output formats: use references for non-null pointers
  json: support std::unique_ptr in array::append and object::set
  diagnostics: SARIF output: use std::unique_ptr throughout
  diagnostics: JSON output: use std::unique_ptr throughout
  diagnostics: SARIF output: potentially add escaped renderings of
    source (§3.3.4)
  diagnostics: SARIF output: add "workingDirectory" property (§3.20.19)
  diagnostics: SARIF output: add "arguments" property (§3.20.2)
  diagnostics: SARIF output: add "{start,end}TimeUtc" properties
    (§§3.20.7-8)
  diagnostics: SARIF output: add "annotations" property (§3.28.6)
  diagnostics: add selftests for SARIF output
  diagnostics: SARIF output: tweak output for UNKNOWN_LOCATION

 gcc/Makefile.in                               |    1 +
 gcc/analyzer/call-string.cc                   |    9 +-
 gcc/analyzer/checker-event.cc                 |    5 +-
 gcc/analyzer/constraint-manager.cc            |   12 +-
 gcc/analyzer/diagnostic-manager.cc            |   14 +-
 gcc/analyzer/engine.cc                        |   13 +-
 gcc/analyzer/program-point.cc                 |   11 +-
 gcc/analyzer/program-state.cc                 |    2 +-
 gcc/analyzer/sm.cc                            |    2 +-
 gcc/analyzer/store.cc                         |    6 +-
 gcc/analyzer/supergraph.cc                    |   21 +-
 gcc/diagnostic-format-json.cc                 |  167 +-
 gcc/diagnostic-format-sarif.cc                | 1738 ++++++++++++-----
 gcc/diagnostic-format-sarif.h                 |    9 +-
 gcc/diagnostic-show-locus.cc                  |   98 +-
 gcc/diagnostic.cc                             |   19 +-
 gcc/diagnostic.h                              |   25 +-
 gcc/dumpfile.cc                               |    1 +
 gcc/gcc-rich-location.h                       |   17 -
 gcc/gcc.cc                                    |    3 +-
 gcc/gcov.cc                                   |    5 +-
 gcc/jit/jit-playback.cc                       |    6 +-
 gcc/json.cc                                   |   36 +-
 gcc/json.h                                    |   45 +
 gcc/optinfo-emit-json.cc                      |    5 +-
 gcc/optinfo.cc                                |    1 +
 gcc/opts.cc                                   |    3 +-
 gcc/selftest-diagnostic-show-locus.h          |   82 +
 gcc/selftest-diagnostic.cc                    |   14 +
 gcc/selftest-diagnostic.h                     |   10 +
 gcc/selftest-json.cc                          |  163 ++
 gcc/selftest-json.h                           |  141 ++
 gcc/selftest-run-tests.cc                     |    1 +
 gcc/selftest.h                                |    1 +
 .../diagnostic-format-sarif-file-1.c          |   11 +
 ...diagnostic-format-sarif-file-Wbidi-chars.c |   17 +
 .../diagnostic_plugin_test_show_locus.c       |    1 +
 gcc/text-range-label.h                        |   42 +
 gcc/timevar.cc                                |    1 +
 gcc/toplev.cc                                 |   14 +-
 gcc/tree-diagnostic-client-data-hooks.cc      |    1 +
 gcc/unique-argv.h                             |   67 +
 libcpp/include/rich-location.h                |   31 +-
 libcpp/line-map.cc                            |   28 +
 44 files changed, 2179 insertions(+), 720 deletions(-)
 create mode 100644 gcc/selftest-diagnostic-show-locus.h
 create mode 100644 gcc/selftest-json.cc
 create mode 100644 gcc/selftest-json.h
 create mode 100644 gcc/text-range-label.h
 create mode 100644 gcc/unique-argv.h