Message ID | 664f44a6.170a0220.7a70.2e85@mx.google.com |
---|---|
State | New |
Headers | show |
Series | [1/2] c++/modules: Fix treatment of unnamed types | expand |
On 5/23/24 09:29, Nathaniel Shead wrote: > And here's that patch. As far as I can tell there should be no visible > change anymore, so there aren't any testcases. > > Bootstrapped and regtested on x86_64-pc-linux-gnu, OK for trunk? OK. > -- >8 -- > > This appears to be an oversight in the definition of module_has_cmi_p. > This change will allow us to use the function directly in more places > that need to additional work only if generating a module CMI in the > future, allowing us to do additional work only when we know we need it. > > gcc/cp/ChangeLog: > > * cp-tree.h (module_has_cmi_p): Also include header units. > (module_maybe_has_cmi_p): Update comment. > * module.cc (set_defining_module): Only need to track > declarations for later exporting if the module may have a CMI. > * name-lookup.cc (pushdecl): Likewise. > > Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> > --- > gcc/cp/cp-tree.h | 7 +++---- > gcc/cp/module.cc | 2 +- > gcc/cp/name-lookup.cc | 2 +- > 3 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h > index ba9e848c177..9472759d3c8 100644 > --- a/gcc/cp/cp-tree.h > +++ b/gcc/cp/cp-tree.h > @@ -7381,7 +7381,7 @@ inline bool module_interface_p () > inline bool module_partition_p () > { return module_kind & MK_PARTITION; } > inline bool module_has_cmi_p () > -{ return module_kind & (MK_INTERFACE | MK_PARTITION); } > +{ return module_kind & (MK_INTERFACE | MK_PARTITION | MK_HEADER); } > > inline bool module_purview_p () > { return module_kind & MK_PURVIEW; } > @@ -7393,9 +7393,8 @@ inline bool named_module_purview_p () > inline bool named_module_attach_p () > { return named_module_p () && module_attach_p (); } > > -/* We don't know if this TU will have a CMI while parsing the GMF, > - so tentatively assume that it might, for the purpose of determining > - whether no-linkage decls could be used by an importer. */ > +/* Like module_has_cmi_p, but tentatively assumes that this TU may have a > + CMI if we haven't seen the module-declaration yet. */ > inline bool module_maybe_has_cmi_p () > { return module_has_cmi_p () || (named_module_p () && !module_purview_p ()); } > > diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc > index 520dd710549..8639ed6f1a2 100644 > --- a/gcc/cp/module.cc > +++ b/gcc/cp/module.cc > @@ -19216,7 +19216,7 @@ set_defining_module (tree decl) > gcc_checking_assert (!DECL_LANG_SPECIFIC (decl) > || !DECL_MODULE_IMPORT_P (decl)); > > - if (module_p ()) > + if (module_maybe_has_cmi_p ()) > { > /* We need to track all declarations within a module, not just those > in the module purview, because we don't necessarily know yet if > diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc > index 78f08acffaa..f1f8c19feb1 100644 > --- a/gcc/cp/name-lookup.cc > +++ b/gcc/cp/name-lookup.cc > @@ -4103,7 +4103,7 @@ pushdecl (tree decl, bool hiding) > > if (level->kind == sk_namespace > && TREE_PUBLIC (level->this_entity) > - && module_p ()) > + && module_maybe_has_cmi_p ()) > maybe_record_mergeable_decl (slot, name, decl); > } > }
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index ba9e848c177..9472759d3c8 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7381,7 +7381,7 @@ inline bool module_interface_p () inline bool module_partition_p () { return module_kind & MK_PARTITION; } inline bool module_has_cmi_p () -{ return module_kind & (MK_INTERFACE | MK_PARTITION); } +{ return module_kind & (MK_INTERFACE | MK_PARTITION | MK_HEADER); } inline bool module_purview_p () { return module_kind & MK_PURVIEW; } @@ -7393,9 +7393,8 @@ inline bool named_module_purview_p () inline bool named_module_attach_p () { return named_module_p () && module_attach_p (); } -/* We don't know if this TU will have a CMI while parsing the GMF, - so tentatively assume that it might, for the purpose of determining - whether no-linkage decls could be used by an importer. */ +/* Like module_has_cmi_p, but tentatively assumes that this TU may have a + CMI if we haven't seen the module-declaration yet. */ inline bool module_maybe_has_cmi_p () { return module_has_cmi_p () || (named_module_p () && !module_purview_p ()); } diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 520dd710549..8639ed6f1a2 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -19216,7 +19216,7 @@ set_defining_module (tree decl) gcc_checking_assert (!DECL_LANG_SPECIFIC (decl) || !DECL_MODULE_IMPORT_P (decl)); - if (module_p ()) + if (module_maybe_has_cmi_p ()) { /* We need to track all declarations within a module, not just those in the module purview, because we don't necessarily know yet if diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 78f08acffaa..f1f8c19feb1 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -4103,7 +4103,7 @@ pushdecl (tree decl, bool hiding) if (level->kind == sk_namespace && TREE_PUBLIC (level->this_entity) - && module_p ()) + && module_maybe_has_cmi_p ()) maybe_record_mergeable_decl (slot, name, decl); } }
And here's that patch. As far as I can tell there should be no visible change anymore, so there aren't any testcases. Bootstrapped and regtested on x86_64-pc-linux-gnu, OK for trunk? -- >8 -- This appears to be an oversight in the definition of module_has_cmi_p. This change will allow us to use the function directly in more places that need to additional work only if generating a module CMI in the future, allowing us to do additional work only when we know we need it. gcc/cp/ChangeLog: * cp-tree.h (module_has_cmi_p): Also include header units. (module_maybe_has_cmi_p): Update comment. * module.cc (set_defining_module): Only need to track declarations for later exporting if the module may have a CMI. * name-lookup.cc (pushdecl): Likewise. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> --- gcc/cp/cp-tree.h | 7 +++---- gcc/cp/module.cc | 2 +- gcc/cp/name-lookup.cc | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-)