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
> > 
> > 
> 

Reply via email to