mirror of git://gcc.gnu.org/git/gcc.git
c++/modules: Also check conflicting internal-linkage entities
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>
This commit is contained in:
parent
6fdee070ff
commit
000cde096d
|
@ -3882,7 +3882,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
|
/* Namespaces are dealt with specially in
|
||||||
make_namespace_finish. */
|
make_namespace_finish. */
|
||||||
&& !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)))
|
&& !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)))
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
// { dg-additional-options "-fmodules-ts" }
|
// { dg-additional-options "-fmodules-ts" }
|
||||||
// The indirect import of frob, with namespaces impl and ompl doesn't
|
|
||||||
// affect us.
|
static int impl; // IF but no diagnostic required: impl@Frob not reachable from here
|
||||||
static int impl;
|
|
||||||
import Frink;
|
import Frink;
|
||||||
|
|
||||||
static int ompl;
|
static int ompl; // { dg-error "different kind" }
|
||||||
|
|
||||||
void corge (int x)
|
|
||||||
{
|
|
||||||
impl = x;
|
|
||||||
ompl = frab (x);
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,16 +2,5 @@
|
||||||
|
|
||||||
import foo;
|
import foo;
|
||||||
|
|
||||||
static int also_not_exported; // ok
|
static int also_not_exported; // { dg-error "different kind" }
|
||||||
|
|
||||||
void X ()
|
|
||||||
{
|
|
||||||
implicit_export::bob ();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int implicit_export; // { dg-error "different kind" }
|
static int implicit_export; // { dg-error "different kind" }
|
||||||
|
|
||||||
void Y ()
|
|
||||||
{
|
|
||||||
also_not_exported = 1;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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 ();
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
Loading…
Reference in New Issue