diff options
author | Nathaniel Shead <nathanieloshead@gmail.com> | 2024-05-23 22:56:52 +1000 |
---|---|---|
committer | Nathaniel Shead <nathanieloshead@gmail.com> | 2024-05-25 00:10:41 +1000 |
commit | 03531ec45f15aa187bbab7842a1eb6cf746a104b (patch) | |
tree | 8297a49906273e8712721668dafb2dcfbecd0bec | |
parent | 0173dcce92baa62a74929814a75edb75eeab1a54 (diff) | |
download | gcc-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.h | 7 | ||||
-rw-r--r-- | gcc/cp/module.cc | 4 | ||||
-rw-r--r-- | gcc/cp/name-lookup.cc | 2 |
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); } } |