]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: fix namespace alias export
authorJason Merrill <jason@redhat.com>
Tue, 12 Nov 2024 21:04:52 +0000 (16:04 -0500)
committerJason Merrill <jason@redhat.com>
Thu, 14 Nov 2024 16:34:06 +0000 (11:34 -0500)
This affected std::views in module std.

gcc/cp/ChangeLog:

* name-lookup.cc (do_namespace_alias): set_originating_module after
pushdecl.

gcc/testsuite/ChangeLog:

* g++.dg/modules/namespace-7_a.C: New test.
* g++.dg/modules/namespace-7_b.C: New test.

gcc/cp/name-lookup.cc
gcc/testsuite/g++.dg/modules/namespace-7_a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/modules/namespace-7_b.C [new file with mode: 0644]

index 72fd48506465e357ea043da9ed396da4edee5a48..2dca57a14fd832d5fb1d1224c535563be16af678 100644 (file)
@@ -6620,9 +6620,13 @@ do_namespace_alias (tree alias, tree name_space)
   DECL_EXTERNAL (alias) = 1;
   DECL_CONTEXT (alias) = FROB_CONTEXT (current_scope ());
   TREE_PUBLIC (alias) = TREE_PUBLIC (DECL_CONTEXT (alias));
-  set_originating_module (alias);
 
-  pushdecl (alias);
+  alias = pushdecl (alias);
+
+  if (!DECL_P (alias) || !DECL_NAMESPACE_ALIAS (alias))
+    return;
+
+  set_originating_module (alias);
 
   /* Emit debug info for namespace alias.  */
   if (!building_stmt_list_p ())
diff --git a/gcc/testsuite/g++.dg/modules/namespace-7_a.C b/gcc/testsuite/g++.dg/modules/namespace-7_a.C
new file mode 100644 (file)
index 0000000..dc2717d
--- /dev/null
@@ -0,0 +1,14 @@
+// { dg-additional-options "-fmodules -Wno-global-module" }
+
+module;
+
+namespace B { int i; }
+namespace C = B;
+
+export module foo;
+// { dg-module-cmi foo }
+
+export {
+  namespace B { using B::i; }
+  namespace C = B;
+}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-7_b.C b/gcc/testsuite/g++.dg/modules/namespace-7_b.C
new file mode 100644 (file)
index 0000000..21abf94
--- /dev/null
@@ -0,0 +1,8 @@
+// { dg-additional-options "-fmodules" }
+
+import foo;
+
+int main()
+{
+  C::i = 42;
+}