Bootstrapped and regtested on x86_64-pc-linux-gnu, OK for trunk?
-- >8 --
While investigating another issue I noticed that the condition in
check_module_override seems incorrect: the wording in [basic.link] p11
has no exceptions for internal-linkage entities.
gcc/cp/ChangeLog:
* name-lookup.cc (check_module_override): Remove check for
TREE_PUBLIC when checking mergeable entities.
gcc/testsuite/ChangeLog:
* g++.dg/modules/namespace-1_c.C: Adjust to expect errors.
* g++.dg/modules/namespace-2_b.C: Likewise.
* g++.dg/modules/namespace-3_a.C: Removed.
* g++.dg/modules/namespace-3_b.C: Removed.
Signed-off-by: Nathaniel Shead <[email protected]>
---
gcc/cp/name-lookup.cc | 2 +-
gcc/testsuite/g++.dg/modules/namespace-1_c.C | 14 ++++---------
gcc/testsuite/g++.dg/modules/namespace-2_b.C | 13 +-----------
gcc/testsuite/g++.dg/modules/namespace-3_a.C | 21 --------------------
gcc/testsuite/g++.dg/modules/namespace-3_b.C | 12 -----------
5 files changed, 6 insertions(+), 56 deletions(-)
delete mode 100644 gcc/testsuite/g++.dg/modules/namespace-3_a.C
delete mode 100644 gcc/testsuite/g++.dg/modules/namespace-3_b.C
diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc
index 32af7a6aed9..86482bc110e 100644
--- a/gcc/cp/name-lookup.cc
+++ b/gcc/cp/name-lookup.cc
@@ -3856,7 +3856,7 @@ check_module_override (tree decl, tree mvec, bool hiding,
}
}
- if (TREE_PUBLIC (scope) && TREE_PUBLIC (STRIP_TEMPLATE (decl))
+ if (TREE_PUBLIC (scope)
/* Namespaces are dealt with specially in
make_namespace_finish. */
&& !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)))
diff --git a/gcc/testsuite/g++.dg/modules/namespace-1_c.C
b/gcc/testsuite/g++.dg/modules/namespace-1_c.C
index 748ef5d79a4..e4f81b6bea6 100644
--- a/gcc/testsuite/g++.dg/modules/namespace-1_c.C
+++ b/gcc/testsuite/g++.dg/modules/namespace-1_c.C
@@ -1,13 +1,7 @@
// { dg-additional-options "-fmodules-ts" }
-// The indirect import of frob, with namespaces impl and ompl doesn't
-// affect us.
-static int impl;
-import Frink;
-static int ompl;
+static int impl; // IF but no diagnostic required: impl@Frob not reachable
from here
+
+import Frink;
-void corge (int x)
-{
- impl = x;
- ompl = frab (x);
-}
+static int ompl; // { dg-error "different kind" }
diff --git a/gcc/testsuite/g++.dg/modules/namespace-2_b.C
b/gcc/testsuite/g++.dg/modules/namespace-2_b.C
index 6ab5113c23a..d71c630c75e 100644
--- a/gcc/testsuite/g++.dg/modules/namespace-2_b.C
+++ b/gcc/testsuite/g++.dg/modules/namespace-2_b.C
@@ -2,16 +2,5 @@
import foo;
-static int also_not_exported; // ok
-
-void X ()
-{
- implicit_export::bob ();
-}
-
+static int also_not_exported; // { dg-error "different kind" }
static int implicit_export; // { dg-error "different kind" }
-
-void Y ()
-{
- also_not_exported = 1;
-}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_a.C
b/gcc/testsuite/g++.dg/modules/namespace-3_a.C
deleted file mode 100644
index 8e9508d7ff8..00000000000
--- a/gcc/testsuite/g++.dg/modules/namespace-3_a.C
+++ /dev/null
@@ -1,21 +0,0 @@
-// Check namespace needed only by internal reference is not made visible
-// { dg-additional-options "-fmodules-ts" }
-
-export module frob;
-// { dg-module-cmi frob }
-
-namespace silent
-{
- namespace inner
- {
- static int X ()
- {
- return 1;
- }
- }
-}
-
-export int f (int y)
-{
- return y + silent::inner::X ();
-}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_b.C
b/gcc/testsuite/g++.dg/modules/namespace-3_b.C
deleted file mode 100644
index f779ffe8c8f..00000000000
--- a/gcc/testsuite/g++.dg/modules/namespace-3_b.C
+++ /dev/null
@@ -1,12 +0,0 @@
-// { dg-additional-options "-fmodules-ts" }
-
-import frob;
-
-int x = silent; // { dg-error "not declared" }
-
-static int silent;
-
-int user ()
-{
- return f (silent);
-}
--
2.51.0