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
|
||||
make_namespace_finish. */
|
||||
&& !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)))
|
||||
|
|
|
@ -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;
|
||||
|
||||
static int impl; // IF but no diagnostic required: impl@Frob not reachable from here
|
||||
|
||||
import Frink;
|
||||
|
||||
static int ompl;
|
||||
|
||||
void corge (int x)
|
||||
{
|
||||
impl = x;
|
||||
ompl = frab (x);
|
||||
}
|
||||
static int ompl; // { dg-error "different kind" }
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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