diff options
author | Nathan Sidwell <nathan@acm.org> | 2018-08-31 12:38:00 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2018-08-31 12:38:00 +0000 |
commit | 7a4e1f7d634faf92e10cf1b42ef162187ddb5f70 (patch) | |
tree | 7d6804c8aecb968760234b1f2d902ed8399e2e90 /gcc | |
parent | 5036f628c7968180d01d7664adb09491493a3ff8 (diff) | |
download | gcc-7a4e1f7d634faf92e10cf1b42ef162187ddb5f70.zip gcc-7a4e1f7d634faf92e10cf1b42ef162187ddb5f70.tar.gz gcc-7a4e1f7d634faf92e10cf1b42ef162187ddb5f70.tar.bz2 |
[PR c++/87155] Anonymous namespace and
https://gcc.gnu.org/ml/gcc-patches/2018-08/msg02031.html
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.
From-SVN: r264016
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/inline-ns10.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr87155.C | 14 |
5 files changed, 39 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0c5a4bf..9e135b3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2018-08-31 Nathan Sidwell <nathan@acm.org> + PR c++/87155 + PR c++/84707 + * name-lookup.c (name_lookup::search_namespace): Don't look at + inlines when searching for NULL names. + * decl.c (decls_match): Remove SYSTEM_IMPLICIT_EXTERN_C matching of return types and parms. * parser.c (cp_parser_parameter_declaration_clause): Likewise, diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index c0a12d7..bb0a70e 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -558,11 +558,14 @@ name_lookup::search_namespace (tree scope) /* Look in exactly namespace. */ bool found = search_namespace_only (scope); - - /* Recursively look in its inline children. */ - if (vec<tree, va_gc> *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<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope)) + for (unsigned ix = inlinees->length (); ix--;) + found |= search_namespace ((*inlinees)[ix]); if (found) mark_found (scope); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac3722a..a588e18 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2018-08-31 Nathan Sidwell <nathan@acm.org> + + PR c++/87155 + PR c++/84707 + * g++.dg/cpp0x/pr87155.C: New. + * g++.dg/cpp0x/inline-ns10.C: Adjust. + 2018-08-31 Jakub Jelinek <jakub@redhat.com> PR middle-end/87138 diff --git a/gcc/testsuite/g++.dg/cpp0x/inline-ns10.C b/gcc/testsuite/g++.dg/cpp0x/inline-ns10.C index 3ab425f..68e8034 100644 --- a/gcc/testsuite/g++.dg/cpp0x/inline-ns10.C +++ b/gcc/testsuite/g++.dg/cpp0x/inline-ns10.C @@ -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" "" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/pr87155.C b/gcc/testsuite/g++.dg/cpp0x/pr87155.C new file mode 100644 index 0000000..7c7e8fb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr87155.C @@ -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" "" } +} |