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