2018-08-31 Nathan Sidwell PR c++/87155 PR c++/84707 cp/ * name-lookup.c (name_lookup::search_namespace): Don't look at inlines when searching for NULL names. testsuite/ * g++.dg/cpp0x/pr87155.C: New. * g++.dg/cpp0x/inline-ns10.C: Adjust. Index: gcc/cp/name-lookup.c =================================================================== --- gcc/cp/name-lookup.c (revision 264014) +++ gcc/cp/name-lookup.c (working copy) @@ -558,11 +558,14 @@ name_lookup::search_namespace (tree scop /* Look in exactly namespace. */ bool found = search_namespace_only (scope); - - /* Recursively look in its inline children. */ - if (vec *inlinees = DECL_NAMESPACE_INLINEES (scope)) - for (unsigned ix = inlinees->length (); ix--;) - found |= search_namespace ((*inlinees)[ix]); + + /* Don't look into inline children, if we're looking for an + anonymous name -- it must be in the current scope, if anywhere. */ + if (name) + /* Recursively look in its inline children. */ + if (vec *inlinees = DECL_NAMESPACE_INLINEES (scope)) + for (unsigned ix = inlinees->length (); ix--;) + found |= search_namespace ((*inlinees)[ix]); if (found) mark_found (scope); Index: gcc/testsuite/g++.dg/cpp0x/inline-ns10.C =================================================================== --- gcc/testsuite/g++.dg/cpp0x/inline-ns10.C (revision 264014) +++ gcc/testsuite/g++.dg/cpp0x/inline-ns10.C (working copy) @@ -2,7 +2,10 @@ // { dg-do compile { target c++11 } } inline namespace { - namespace {} + namespace {} // not this one + void a (); } -namespace {} // { dg-error "conflicts" } +namespace { + int a (); // { dg-error "ambiguating" "" } +} Index: gcc/testsuite/g++.dg/cpp0x/pr87155.C =================================================================== --- gcc/testsuite/g++.dg/cpp0x/pr87155.C (revision 0) +++ gcc/testsuite/g++.dg/cpp0x/pr87155.C (working copy) @@ -0,0 +1,14 @@ +// { dg-do compile { target c++11 } } +// PR c++/87155 confused about which anon namespace + +namespace { + void a (); // this one +} + +inline namespace n2 { + namespace {} +} + +namespace { + int a (); // { dg-error "ambiguating" "" } +}