aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathaniel Shead <nathanieloshead@gmail.com>2024-05-23 22:56:52 +1000
committerNathaniel Shead <nathanieloshead@gmail.com>2024-05-25 00:10:41 +1000
commit03531ec45f15aa187bbab7842a1eb6cf746a104b (patch)
tree8297a49906273e8712721668dafb2dcfbecd0bec
parent0173dcce92baa62a74929814a75edb75eeab1a54 (diff)
downloadgcc-03531ec45f15aa187bbab7842a1eb6cf746a104b.zip
gcc-03531ec45f15aa187bbab7842a1eb6cf746a104b.tar.gz
gcc-03531ec45f15aa187bbab7842a1eb6cf746a104b.tar.bz2
c++/modules: Remember that header units have CMIs
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. (set_defining_module_for_partial_spec): Likewise. * name-lookup.cc (pushdecl): Likewise. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
-rw-r--r--gcc/cp/cp-tree.h7
-rw-r--r--gcc/cp/module.cc4
-rw-r--r--gcc/cp/name-lookup.cc2
3 files changed, 6 insertions, 7 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 7ae5b87..655850a 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 3ca963c..6cd7d9e 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -19221,7 +19221,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
@@ -19261,7 +19261,7 @@ set_defining_module (tree decl)
void
set_defining_module_for_partial_spec (tree decl)
{
- if (module_p ()
+ if (module_maybe_has_cmi_p ()
&& DECL_IMPLICIT_TYPEDEF_P (decl)
&& CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
vec_safe_push (partial_specializations, decl);
diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc
index 78f08ac..f1f8c19 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);
}
}