aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathaniel Shead <nathanieloshead@gmail.com>2024-04-08 23:34:42 +1000
committerNathaniel Shead <nathanieloshead@gmail.com>2024-04-15 18:22:56 +1000
commit3878e9aeb30cb192f769997c52743daf8190744c (patch)
treebea31805c292d1add7a09b1fc59d76eb5c965ddb
parentfe99ab1f5e9920fd46ef8148fcffde6729d68523 (diff)
downloadgcc-3878e9aeb30cb192f769997c52743daf8190744c.zip
gcc-3878e9aeb30cb192f769997c52743daf8190744c.tar.gz
gcc-3878e9aeb30cb192f769997c52743daf8190744c.tar.bz2
c++: Only emit exported GMF usings [PR114600]
A typo in r14-6978 made us emit too many things. This ensures that we don't emit using-declarations from the GMF that we don't need to. PR c++/114600 gcc/cp/ChangeLog: * module.cc (depset::hash::add_binding_entity): Require both WMB_Using and WMB_Export for GMF entities. gcc/testsuite/ChangeLog: * g++.dg/modules/using-14.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Co-authored-by: Patrick Palka <ppalka@redhat.com>
-rw-r--r--gcc/cp/module.cc2
-rw-r--r--gcc/testsuite/g++.dg/modules/using-14.C14
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 001430a..d94d8ff 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -13090,7 +13090,7 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_)
inner = DECL_TEMPLATE_RESULT (inner);
if ((!DECL_LANG_SPECIFIC (inner) || !DECL_MODULE_PURVIEW_P (inner))
- && !(flags & (WMB_Using | WMB_Export)))
+ && !((flags & WMB_Using) && (flags & WMB_Export)))
/* Ignore global module fragment entities unless explicitly
exported with a using declaration. */
return false;
diff --git a/gcc/testsuite/g++.dg/modules/using-14.C b/gcc/testsuite/g++.dg/modules/using-14.C
new file mode 100644
index 0000000..0e15a95
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/using-14.C
@@ -0,0 +1,14 @@
+// PR c++/114600
+// { dg-additional-options "-fmodules-ts -Wno-global-module -fdump-lang-module" }
+// { dg-module-cmi M }
+
+module;
+namespace std {
+ template<class T> struct A { int n; };
+ template<class T> A<T> f();
+ namespace __swappable_details { using std::f; }
+}
+export module M;
+
+// The whole GMF should be discarded here
+// { dg-final { scan-lang-dump "Wrote 0 clusters" module } }