name-lookup.c (qualified_lookup_using_namespace): Don't stop looking in used namespaces just because we found something on...
* name-lookup.c (qualified_lookup_using_namespace): Don't stop looking in used namespaces just because we found something on another branch. From-SVN: r149637
This commit is contained in:
parent
4e6a97250c
commit
3deeb3ff03
@ -1,5 +1,10 @@
|
||||
2009-07-14 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/40746
|
||||
* name-lookup.c (qualified_lookup_using_namespace): Don't stop
|
||||
looking in used namespaces just because we found something on
|
||||
another branch.
|
||||
|
||||
PR c++/40740
|
||||
* semantics.c (perform_koenig_lookup): Handle empty template args.
|
||||
|
||||
|
@ -3929,6 +3929,7 @@ qualified_lookup_using_namespace (tree name, tree scope,
|
||||
/* ... and a list of namespace yet to see. */
|
||||
tree todo = NULL_TREE;
|
||||
tree todo_maybe = NULL_TREE;
|
||||
tree *todo_weak = &todo_maybe;
|
||||
tree usings;
|
||||
timevar_push (TV_NAME_LOOKUP);
|
||||
/* Look through namespace aliases. */
|
||||
@ -3942,9 +3943,7 @@ qualified_lookup_using_namespace (tree name, tree scope,
|
||||
ambiguous_decl (result, binding, flags);
|
||||
|
||||
/* Consider strong using directives always, and non-strong ones
|
||||
if we haven't found a binding yet. ??? Shouldn't we consider
|
||||
non-strong ones if the initial RESULT is non-NULL, but the
|
||||
binding in the given namespace is? */
|
||||
if we haven't found a binding yet. */
|
||||
for (usings = DECL_NAMESPACE_USING (scope); usings;
|
||||
usings = TREE_CHAIN (usings))
|
||||
/* If this was a real directive, and we have not seen it. */
|
||||
@ -3959,12 +3958,12 @@ qualified_lookup_using_namespace (tree name, tree scope,
|
||||
&& !purpose_member (TREE_PURPOSE (usings), seen)
|
||||
&& !purpose_member (TREE_PURPOSE (usings), todo))
|
||||
todo = tree_cons (TREE_PURPOSE (usings), NULL_TREE, todo);
|
||||
else if ((!result->value && !result->type)
|
||||
else if (!binding
|
||||
&& !purpose_member (TREE_PURPOSE (usings), seen)
|
||||
&& !purpose_member (TREE_PURPOSE (usings), todo)
|
||||
&& !purpose_member (TREE_PURPOSE (usings), todo_maybe))
|
||||
todo_maybe = tree_cons (TREE_PURPOSE (usings), NULL_TREE,
|
||||
todo_maybe);
|
||||
*todo_weak = tree_cons (TREE_PURPOSE (usings), NULL_TREE,
|
||||
*todo_weak);
|
||||
}
|
||||
if (todo)
|
||||
{
|
||||
@ -3977,6 +3976,7 @@ qualified_lookup_using_namespace (tree name, tree scope,
|
||||
scope = TREE_PURPOSE (todo_maybe);
|
||||
todo = TREE_CHAIN (todo_maybe);
|
||||
todo_maybe = NULL_TREE;
|
||||
todo_weak = &todo;
|
||||
}
|
||||
else
|
||||
scope = NULL_TREE; /* If there never was a todo list. */
|
||||
|
@ -1,5 +1,8 @@
|
||||
2009-07-14 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/40746
|
||||
* g++.dg/lookup/using20.C: New.
|
||||
|
||||
PR c++/40740
|
||||
* g++.dg/template/koenig8.C: New.
|
||||
|
||||
|
18
gcc/testsuite/g++.dg/lookup/using20.C
Normal file
18
gcc/testsuite/g++.dg/lookup/using20.C
Normal file
@ -0,0 +1,18 @@
|
||||
// PR c++/40476
|
||||
|
||||
namespace A
|
||||
{
|
||||
int i; // { dg-error "i" }
|
||||
}
|
||||
using namespace A;
|
||||
namespace B
|
||||
{
|
||||
namespace B2
|
||||
{
|
||||
int i; // { dg-error "i" }
|
||||
}
|
||||
using namespace B2;
|
||||
}
|
||||
using namespace B;
|
||||
|
||||
int j = ::i; // { dg-error "ambiguous" }
|
Loading…
Reference in New Issue
Block a user