diff mbox series

[2/2] c++/modules: Remember that header units have CMIs

Message ID 664f44a6.170a0220.7a70.2e85@mx.google.com
State New
Headers show
Series [1/2] c++/modules: Fix treatment of unnamed types | expand

Commit Message

Nathaniel Shead May 23, 2024, 1:29 p.m. UTC
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(-)

Comments

Jason Merrill May 23, 2024, 7:37 p.m. UTC | #1
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 mbox series

Patch

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);
 	}
     }