Ping for this patch.
On Wed, May 28, 2025 at 02:19:11PM -0400, Patrick Palka wrote: > On Sat, 24 May 2025, Nathaniel Shead wrote: > > > Bootstrapped and regtested on x86_64-pc-linux-gnu, OK for trunk/15? > > LGTM FWIW > > > > > -- >8 -- > > > > When emitting a primary module interface, we must re-stream any TU-local > > entities that we saw in a partition. This patch adds the missing > > members from core_vals. > > > > As a drive-by fix, in some cases we might have a typedef referring to a > > TU-local entity; we need to handle that case as well. > > > > PR c++/120412 > > > > gcc/cp/ChangeLog: > > > > * module.cc (trees_out::core_vals): Write TU_LOCAL_ENTITY bits. > > (trees_in::core_vals): Read it. > > (trees_in::tree_node): Handle TU_LOCAL_ENTITY typedefs. > > > > gcc/testsuite/ChangeLog: > > > > * g++.dg/modules/internal-14_a.C: New test. > > * g++.dg/modules/internal-14_b.C: New test. > > * g++.dg/modules/internal-14_c.C: New test. > > > > Signed-off-by: Nathaniel Shead <nathanielosh...@gmail.com> > > --- > > gcc/cp/module.cc | 15 ++++++++++++++- > > gcc/testsuite/g++.dg/modules/internal-14_a.C | 17 +++++++++++++++++ > > gcc/testsuite/g++.dg/modules/internal-14_b.C | 6 ++++++ > > gcc/testsuite/g++.dg/modules/internal-14_c.C | 9 +++++++++ > > 4 files changed, 46 insertions(+), 1 deletion(-) > > create mode 100644 gcc/testsuite/g++.dg/modules/internal-14_a.C > > create mode 100644 gcc/testsuite/g++.dg/modules/internal-14_b.C > > create mode 100644 gcc/testsuite/g++.dg/modules/internal-14_c.C > > > > diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc > > index 17c040d26b0..16322fddde7 100644 > > --- a/gcc/cp/module.cc > > +++ b/gcc/cp/module.cc > > @@ -6774,6 +6774,13 @@ trees_out::core_vals (tree t) > > if (streaming_p ()) > > WU (((lang_tree_node *)t)->trait_expression.kind); > > break; > > + > > + case TU_LOCAL_ENTITY: > > + WT (((lang_tree_node *)t)->tu_local_entity.name); > > + if (state) > > + state->write_location > > + (*this, ((lang_tree_node *)t)->tu_local_entity.loc); > > + break; > > } > > > > if (CODE_CONTAINS_STRUCT (code, TS_TYPED)) > > @@ -7317,6 +7324,11 @@ trees_in::core_vals (tree t) > > RT (((lang_tree_node *)t)->trait_expression.type2); > > RUC (cp_trait_kind, ((lang_tree_node *)t)->trait_expression.kind); > > break; > > + > > + case TU_LOCAL_ENTITY: > > + RT (((lang_tree_node *)t)->tu_local_entity.name); > > + ((lang_tree_node *)t)->tu_local_entity.loc > > + = state->read_location (*this); > > } > > > > if (CODE_CONTAINS_STRUCT (code, TS_TYPED)) > > @@ -10125,7 +10137,8 @@ trees_in::tree_node (bool is_use) > > && dump ("Read %stypedef %C:%N", > > DECL_IMPLICIT_TYPEDEF_P (res) ? "implicit " : "", > > TREE_CODE (res), res); > > - res = TREE_TYPE (res); > > + if (TREE_CODE (res) != TU_LOCAL_ENTITY) > > + res = TREE_TYPE (res); > > } > > break; > > > > diff --git a/gcc/testsuite/g++.dg/modules/internal-14_a.C > > b/gcc/testsuite/g++.dg/modules/internal-14_a.C > > new file mode 100644 > > index 00000000000..07eb9658951 > > --- /dev/null > > +++ b/gcc/testsuite/g++.dg/modules/internal-14_a.C > > @@ -0,0 +1,17 @@ > > +// PR c++/120412 > > +// { dg-additional-options "-fmodules -std=c++20 > > -Wtemplate-names-tu-local" } > > +// { dg-module-cmi m:part } > > + > > +export module m:part; > > + > > +export template <typename F> > > +auto fun1(F) { > > + return true; > > +} > > + > > +using Dodgy = decltype([]{}); > > + > > +export template <typename T> > > +auto fun2(T&&) { // { dg-warning "TU-local" } > > + return fun1(Dodgy{}); > > +} > > diff --git a/gcc/testsuite/g++.dg/modules/internal-14_b.C > > b/gcc/testsuite/g++.dg/modules/internal-14_b.C > > new file mode 100644 > > index 00000000000..ad3b09d0722 > > --- /dev/null > > +++ b/gcc/testsuite/g++.dg/modules/internal-14_b.C > > @@ -0,0 +1,6 @@ > > +// PR c++/120412 > > +// { dg-additional-options "-fmodules -std=c++20 > > -Wtemplate-names-tu-local" } > > +// { dg-module-cmi m } > > + > > +export module m; > > +export import :part; > > diff --git a/gcc/testsuite/g++.dg/modules/internal-14_c.C > > b/gcc/testsuite/g++.dg/modules/internal-14_c.C > > new file mode 100644 > > index 00000000000..4f8e785ce87 > > --- /dev/null > > +++ b/gcc/testsuite/g++.dg/modules/internal-14_c.C > > @@ -0,0 +1,9 @@ > > +// PR c++/120412 > > +// { dg-additional-options "-fmodules -std=c++20" } > > + > > +import m; > > + > > +int main() { > > + // { dg-error "instantiation exposes TU-local entity '(fun1|Dodgy)'" "" > > { target *-*-* } 0 } > > + fun2(123); // { dg-message "required from here" } > > +} > > -- > > 2.47.0 > > > > >