aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2018-04-27 16:56:55 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2018-04-27 16:56:55 +0000
commita6e34898d1e8920cc68d2089e45434c9703a77d0 (patch)
treefe98a04a49b515de108cb210e8fe690dcb838ace /gcc
parent6d0e87b25ee21493d4f47bb39aee3e2d33cb08d9 (diff)
downloadgcc-a6e34898d1e8920cc68d2089e45434c9703a77d0.zip
gcc-a6e34898d1e8920cc68d2089e45434c9703a77d0.tar.gz
gcc-a6e34898d1e8920cc68d2089e45434c9703a77d0.tar.bz2
re PR c++/84691 (internal compiler error: in poplevel_class, at cp/name-lookup.c:4430)
/cp 2018-04-27 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84691 * decl.c (grokdeclarator): Clear friendp upon definition in local class definition error. /testsuite 2018-04-27 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84691 * g++.dg/cpp0x/friend3.C: New. From-SVN: r259716
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/friend3.C11
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9fd5266..552828f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/84691
+ * decl.c (grokdeclarator): Clear friendp upon definition in local
+ class definition error.
+
2018-04-27 Jason Merrill <jason@redhat.com>
PR c++/85545 - ICE with noexcept PMF conversion.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 55e2343..03bc041 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -11298,9 +11298,11 @@ grokdeclarator (const cp_declarator *declarator,
if (decl_context == NORMAL)
error ("friend declaration not in class definition");
if (current_function_decl && funcdef_flag)
- error ("can%'t define friend function %qs in a local "
- "class definition",
- name);
+ {
+ error ("can%'t define friend function %qs in a local "
+ "class definition", name);
+ friendp = 0;
+ }
}
else if (ctype && sfk == sfk_conversion)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 79d712f..a20bfd0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-04-27 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/84691
+ * g++.dg/cpp0x/friend3.C: New.
+
2018-04-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/82518
diff --git a/gcc/testsuite/g++.dg/cpp0x/friend3.C b/gcc/testsuite/g++.dg/cpp0x/friend3.C
new file mode 100644
index 0000000..4432fc1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/friend3.C
@@ -0,0 +1,11 @@
+// PR c++/84691
+// { dg-do compile { target c++11 } }
+
+template<typename>
+struct a {
+ unsigned b = [] {
+ union {
+ friend void c() {} // { dg-error "local class" }
+ }; // { dg-error "no members" }
+ };
+};