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 <nathanieloshead@gmail.com>
Reviewed-by: Jason Merrill <jason@redhat.com>
}
}
- 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)))
// { 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" }
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;
-}
+++ /dev/null
-// 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 ();
-}
+++ /dev/null
-// { dg-additional-options "-fmodules-ts" }
-
-import frob;
-
-int x = silent; // { dg-error "not declared" }
-
-static int silent;
-
-int user ()
-{
- return f (silent);
-}