Ping #2

On Tue, 2025-12-02 at 12:16 -0500, David Malcolm wrote:
> Hi everyone.
> 
> I'd like to ping this patch kit:
> 
> [PATCH 0/4] Publish/subscribe framework for typesafe loosely-coupled
> notifications
> https://gcc.gnu.org/pipermail/gcc-patches/2025-November/700681.html
> 
> I can self-approve patches 3 and 4, but given that patches 1 and 2
> introduce a new subsystem into GCC, they should probably be looked at
> by another maintainer.
> 
> Thanks
> Dave
> 
> 
> On Fri, 2025-11-14 at 13:26 -0500, David Malcolm wrote:
> > This patch kit introduces a publish/subscribe mechanism to GCC's
> > codebase, allowing for loosely-coupled senders and receivers, with
> > strongly-typed messages passing between them.
> > 
> > For example, a GCC subsystem could publish messages about events,
> > and plugins or diagnostic sinks could subscribe to them.
> > 
> > This is a little like the plugin subsystem, but unlike the plugin
> > subsystem where callbacks receive "void *", the messages are
> > strongly-typed.  Also, I want to have diagnostic sinks subscribe to
> > some messages, and these are not plugins.  It seems to me that the
> > notification mechanism should be orthogonal to whether or not the
> > sender or receiver components are built in the main executable or
> > are
> > in a plugin.
> > 
> > Patch 1 adds generic publish/subscribe classes, and selftests.
> > 
> > Patch 2 adds:
> > * a new gcc/topics/ source subdirectory to hold the types for
> > publish/subscribe topics relating to the compiler
> > * a new struct compiler_channels to the global gcc::context
> > * a pass_events_channel which issues notifications when passes
> > stop and start on particular functions
> > * a toy plugin using the above to implement a progress notification
> > UI
> > 
> > Patch 3 uses the pass_events_channel to extend the diagnostics
> > subsystem
> > so that sinks gain a key/value pair "cfg={yes,no}" which allows
> > capturing
> > the state of GCC's internal representation in SARIF files.
> > 
> > Patch 4 is an example of eliminating a plugin event
> > (PLUGIN_ANALYZER_INIT)in favor of a pub/sub channel, which plugins
> > can
> > subscribe to instead.
> > 
> > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
> > 
> > OK for trunk?
> > 
> > I have various followups planned that add other kinds of channel,
> > and
> > allow other kinds of information to be (optionally) captured in
> > SARIF
> > dumps:
> > • callgraph
> > • inheritance hierarchy
> > • #include graph of a TU (what includes what)
> > * etc
> > but those patches aren't yet ready [1]
> > 
> > Dave
> > 
> > [1] see slides 33-38 of my Cauldron talk:
> > https://gcc.gnu.org/wiki/cauldron2025#What.27s_new_with_diagnostics_in_GCC_16
> > 
> > 
> > David Malcolm (4):
> >   Add pub-sub.{h,cc}
> >   Add publish/subscribe topics and channel: pass_events
> >   diagnostics: add optional CFG dumps to SARIF/HTML output sinks
> >   analyzer: replace PLUGIN_ANALYZER_INIT with a pub/sub channel
> > 
> >  gcc/Makefile.in                               |   5 +
> >  gcc/analyzer/common.h                         |  47 ++-
> >  gcc/analyzer/engine.cc                        |  36 +-
> >  gcc/cfghooks.cc                               |  30 ++
> >  gcc/cfghooks.h                                |  10 +
> >  gcc/cfgrtl.cc                                 |   2 +
> >  gcc/channels.h                                |  45 ++
> >  gcc/context.cc                                |   7 +-
> >  gcc/context.h                                 |  12 +
> >  gcc/custom-sarif-properties/cfg.cc            |  69 ++++
> >  gcc/custom-sarif-properties/cfg.h             |  64 +++
> >  gcc/diagnostics/digraphs-to-dot-from-cfg.cc   | 323
> > +++++++++++++++
> >  gcc/diagnostics/digraphs-to-dot.cc            | 202 +++++++++
> >  gcc/diagnostics/digraphs-to-dot.h             |  84 ++++
> >  gcc/diagnostics/digraphs.cc                   | 137 +-----
> >  gcc/diagnostics/digraphs.h                    |   6 +
> >  gcc/diagnostics/html-sink.cc                  |  30 ++
> >  gcc/diagnostics/sarif-sink.cc                 |  40 ++
> >  gcc/diagnostics/sink.h                        |   5 +
> >  gcc/diagnostics/text-sink.h                   |   7 +
> >  gcc/doc/invoke.texi                           |  23 +-
> >  gcc/doc/plugins.texi                          |   4 -
> >  gcc/gimple-pretty-print.cc                    |  84 ++++
> >  gcc/gimple-pretty-print.h                     |   7 +
> >  gcc/graphviz.cc                               |  52 +++
> >  gcc/graphviz.h                                |   3 +
> >  gcc/libsarifreplay.cc                         |   5 +-
> >  gcc/opts-common.cc                            |   1 +
> >  gcc/opts-diagnostic.cc                        |  93 ++++-
> >  gcc/opts-diagnostic.h                         |  14 +
> >  gcc/opts.cc                                   |   1 +
> >  gcc/passes.cc                                 |  12 +
> >  gcc/plugin.cc                                 |   2 -
> >  gcc/plugin.def                                |   4 -
> >  gcc/print-rtl.cc                              |  25 ++
> >  gcc/print-rtl.h                               |   7 +
> >  gcc/pub-sub.cc                                | 138 +++++++
> >  gcc/pub-sub.h                                 |  68 +++
> >  gcc/selftest-run-tests.cc                     |   1 +
> >  gcc/selftest.h                                |   1 +
> >  gcc/testsuite/gcc.dg/diagnostic-cfgs-html.py  |  21 +
> >  gcc/testsuite/gcc.dg/diagnostic-cfgs-sarif.py |  84 ++++
> >  gcc/testsuite/gcc.dg/diagnostic-cfgs.c        |  18 +
> >  .../gcc.dg/plugin/analyzer_cpython_plugin.cc  |  53 +--
> >  .../gcc.dg/plugin/analyzer_gil_plugin.cc      |  30 +-
> >  .../gcc.dg/plugin/analyzer_kernel_plugin.cc   |  43 +-
> >  .../plugin/analyzer_known_fns_plugin.cc       |  37 +-
> >  gcc/testsuite/gcc.dg/plugin/plugin.exp        |   1 +
> >  .../plugin/progress_notifications_plugin.cc   |  51 +++
> >  gcc/topics/pass-events.h                      |  59 +++
> >  gcc/tree-cfg.cc                               |   1 +
> >  gcc/tree-diagnostic-cfg.cc                    | 390
> > ++++++++++++++++++
> >  gcc/tree-diagnostic-sink-extensions.h         |  32 ++
> >  gcc/tree-diagnostic.cc                        |   5 +
> >  54 files changed, 2256 insertions(+), 275 deletions(-)
> >  create mode 100644 gcc/channels.h
> >  create mode 100644 gcc/custom-sarif-properties/cfg.cc
> >  create mode 100644 gcc/custom-sarif-properties/cfg.h
> >  create mode 100644 gcc/diagnostics/digraphs-to-dot-from-cfg.cc
> >  create mode 100644 gcc/diagnostics/digraphs-to-dot.cc
> >  create mode 100644 gcc/diagnostics/digraphs-to-dot.h
> >  create mode 100644 gcc/pub-sub.cc
> >  create mode 100644 gcc/pub-sub.h
> >  create mode 100644 gcc/testsuite/gcc.dg/diagnostic-cfgs-html.py
> >  create mode 100644 gcc/testsuite/gcc.dg/diagnostic-cfgs-sarif.py
> >  create mode 100644 gcc/testsuite/gcc.dg/diagnostic-cfgs.c
> >  create mode 100644
> > gcc/testsuite/gcc.dg/plugin/progress_notifications_plugin.cc
> >  create mode 100644 gcc/topics/pass-events.h
> >  create mode 100644 gcc/tree-diagnostic-cfg.cc
> >  create mode 100644 gcc/tree-diagnostic-sink-extensions.h
> > 
> 

Reply via email to