aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2018-08-31 12:38:00 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2018-08-31 12:38:00 +0000
commit7a4e1f7d634faf92e10cf1b42ef162187ddb5f70 (patch)
tree7d6804c8aecb968760234b1f2d902ed8399e2e90 /gcc
parent5036f628c7968180d01d7664adb09491493a3ff8 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/name-lookup.c13
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/inline-ns10.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr87155.C14
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" "" }
+}