On 10/4/22 11:11, Ben Boeckel wrote:
This patch adds initial support for ISO C++'s [P1689R5][], a format for
describing C++ module requirements and provisions based on the source
code. This is required because compiling C++ with modules is not
embarrassingly parallel and need to be ordered to ensure that `import
some_module;` can be satisfied in time by making sure that the TU with
`export import some_module;` is compiled first.

[P1689R5]: https://isocpp.org/files/papers/P1689R5.html

I'd like feedback on the approach taken here with respect to the
user-visible flags. I'll also note that header units are not supported
at this time because the current `-E` behavior with respect to `import
<some_header>;` is to search for an appropriate `.gcm` file which is not
something such a "scan" can support. A new mode will likely need to be
created (e.g., replacing `-E` with `-fc++-module-scanning` or something)
where headers are looked up "normally" and processed only as much as
scanning requires.

Testing is currently happening in CMake's CI using a prior revision of
this patch (the differences are basically the changelog, some style, and
`trtbd` instead of `p1689r5` as the format name).

For testing within GCC, I'll work on the following:

- scanning non-module source
- scanning module-importing source (`import X;`)
- scanning module-exporting source (`export module X;`)
- scanning module implementation unit (`module X;`)
- flag combinations?

Are there existing tools for handling JSON output for testing purposes?

David Malcolm would probably know best about JSON wrangling.

Basically, something that I can add to the test suite that doesn't care
about whitespace, but checks the structure (with sensible replacements
for absolute paths where relevant)?

Various tests in g++.dg/debug/dwarf2 handle that sort of thing with regexps.

For the record, Clang has patches with similar flags and behavior by
Chuanqi Xu here:

     https://reviews.llvm.org/D134269

with the same flags (though using my old `trtbd` spelling for the
format name).

Thanks,

--Ben

Ben Boeckel (1):
   p1689r5: initial support

  gcc/ChangeLog           |   9 ++
  gcc/c-family/ChangeLog  |   6 +
  gcc/c-family/c-opts.cc  |  40 ++++++-
  gcc/c-family/c.opt      |  12 ++
  gcc/cp/ChangeLog        |   5 +
  gcc/cp/module.cc        |   3 +-
  gcc/doc/invoke.texi     |  15 +++
  gcc/fortran/ChangeLog   |   5 +
  gcc/fortran/cpp.cc      |   4 +-
  gcc/genmatch.cc         |   2 +-
  gcc/input.cc            |   4 +-
  libcpp/ChangeLog        |  11 ++
  libcpp/include/cpplib.h |  12 +-
  libcpp/include/mkdeps.h |  17 ++-
  libcpp/init.cc          |  14 ++-
  libcpp/mkdeps.cc        | 235 ++++++++++++++++++++++++++++++++++++++--
  16 files changed, 368 insertions(+), 26 deletions(-)


base-commit: d812e8cb2a920fd75768e16ca8ded59ad93c172f

Reply via email to