This patch series implements most of the changes made by P1815. It also cleans up a few bugs found along the way that impacted tests I wrote.
The whole patch series was bootstrapped on x86_64-pc-linux-gnu with no regressions. Nathaniel Shead (10): libstdc++: Remove unnecessary 'static' from __is_specialization_of c++: Update decl_linkage for C++11 c++/modules: Use decl_linkage in maybe_record_mergeable_decl c++/modules: Fix linkage checks for exported using-decls c++/modules: Allow imported references in constant expressions c++/modules: Detect exposures of TU-local entities c++/modules: Implement ignored TU-local exposures c++/modules: Support anonymous namespaces in header units c++/modules: Check linkage for exported declarations c++/modules: Validate external linkage definitions in header units [PR116401] gcc/c-family/c.opt | 4 + gcc/cp/cp-objcp-common.cc | 1 + gcc/cp/cp-tree.def | 6 + gcc/cp/cp-tree.h | 29 +- gcc/cp/decl.cc | 1 + gcc/cp/decl2.cc | 1 + gcc/cp/module.cc | 764 +++++++++++++++++--- gcc/cp/name-lookup.cc | 88 +-- gcc/cp/name-lookup.h | 2 +- gcc/cp/parser.cc | 25 +- gcc/cp/parser.h | 3 + gcc/cp/pt.cc | 100 ++- gcc/cp/tree.cc | 92 ++- gcc/doc/invoke.texi | 19 +- gcc/testsuite/g++.dg/modules/block-decl-2.C | 2 +- gcc/testsuite/g++.dg/modules/cexpr-5_a.C | 13 + gcc/testsuite/g++.dg/modules/cexpr-5_b.C | 9 + gcc/testsuite/g++.dg/modules/export-3.C | 2 +- gcc/testsuite/g++.dg/modules/export-6.C | 35 + gcc/testsuite/g++.dg/modules/hdr-2.H | 164 +++++ gcc/testsuite/g++.dg/modules/internal-1.C | 15 +- gcc/testsuite/g++.dg/modules/internal-3.C | 18 + gcc/testsuite/g++.dg/modules/internal-4.C | 112 +++ gcc/testsuite/g++.dg/modules/internal-5_a.C | 104 +++ gcc/testsuite/g++.dg/modules/internal-5_b.C | 29 + gcc/testsuite/g++.dg/modules/internal-6.C | 24 + gcc/testsuite/g++.dg/modules/internal-7_a.C | 75 ++ gcc/testsuite/g++.dg/modules/internal-7_b.C | 21 + gcc/testsuite/g++.dg/modules/internal-8_a.H | 28 + gcc/testsuite/g++.dg/modules/internal-8_b.C | 29 + gcc/testsuite/g++.dg/modules/linkage-2.C | 5 +- gcc/testsuite/g++.dg/modules/macro-4_c.H | 2 +- gcc/testsuite/g++.dg/modules/mod-sym-4.C | 4 +- gcc/testsuite/g++.dg/modules/pr106761.h | 2 +- gcc/testsuite/g++.dg/modules/pr98843_b.H | 2 +- gcc/testsuite/g++.dg/modules/pr99468.H | 2 +- gcc/testsuite/g++.dg/modules/pragma-1_a.H | 2 +- gcc/testsuite/g++.dg/modules/tpl-ary-1.h | 2 +- gcc/testsuite/g++.dg/modules/using-10.C | 56 +- gcc/testsuite/g++.dg/modules/using-12.C | 42 +- gcc/testsuite/g++.dg/modules/using-27.C | 14 + gcc/testsuite/g++.dg/modules/using-28_a.C | 12 + gcc/testsuite/g++.dg/modules/using-28_b.C | 8 + libcc1/libcp1plugin.cc | 2 +- libstdc++-v3/include/std/format | 5 +- 45 files changed, 1738 insertions(+), 237 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/cexpr-5_a.C create mode 100644 gcc/testsuite/g++.dg/modules/cexpr-5_b.C create mode 100644 gcc/testsuite/g++.dg/modules/export-6.C create mode 100644 gcc/testsuite/g++.dg/modules/hdr-2.H create mode 100644 gcc/testsuite/g++.dg/modules/internal-3.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-4.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-5_a.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-5_b.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-6.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-7_a.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-7_b.C create mode 100644 gcc/testsuite/g++.dg/modules/internal-8_a.H create mode 100644 gcc/testsuite/g++.dg/modules/internal-8_b.C create mode 100644 gcc/testsuite/g++.dg/modules/using-27.C create mode 100644 gcc/testsuite/g++.dg/modules/using-28_a.C create mode 100644 gcc/testsuite/g++.dg/modules/using-28_b.C -- 2.46.0