aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2014-12-16 23:28:31 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-12-16 23:28:31 +0000
commit0007ff03b088aadc9623e17df257a3e2792d115e (patch)
tree9c1028159cc8fd9a8051ef7bd204a864eb61688e /gcc
parente0d475db10f8976060a964517a64cd7b4508cefa (diff)
downloadgcc-0007ff03b088aadc9623e17df257a3e2792d115e.zip
gcc-0007ff03b088aadc9623e17df257a3e2792d115e.tar.gz
gcc-0007ff03b088aadc9623e17df257a3e2792d115e.tar.bz2
re PR c++/58650 ([c++11] ICE with invalid friend declaration)
/cp 2014-12-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58650 * parser.c (cp_parser_member_declaration): Fix error recovery for initialized non-static data member declared friend. /testsuite 2014-12-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58650 * g++.dg/parse/friend12.C: New. From-SVN: r218801
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/friend12.C7
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4c6043e..42c0bb5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58650
+ * parser.c (cp_parser_member_declaration): Fix error recovery for
+ initialized non-static data member declared friend.
+
2014-12-15 Jan Hubicka <hubicka@ucw.cz>
* decl2.c (decl_needed_p): When not optimizing, do not consider external
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 76725ef..0e7ba7a 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -21069,7 +21069,10 @@ cp_parser_member_declaration (cp_parser* parser)
if (decl)
{
/* Add DECL to the list of members. */
- if (!friend_p)
+ if (!friend_p
+ /* Explicitly include, eg, NSDMIs, for better error
+ recovery (c++/58650). */
+ || !DECL_DECLARES_FUNCTION_P (decl))
finish_member_declaration (decl);
if (TREE_CODE (decl) == FUNCTION_DECL)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5f9d676..e896b0b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-12-16 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58650
+ * g++.dg/parse/friend12.C: New.
+
2014-12-16 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54089
diff --git a/gcc/testsuite/g++.dg/parse/friend12.C b/gcc/testsuite/g++.dg/parse/friend12.C
new file mode 100644
index 0000000..f0e28a8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/friend12.C
@@ -0,0 +1,7 @@
+// PR c++/58650
+
+struct A
+{
+ friend int i = 0; // { dg-error "cannot be declared friend" }
+// { dg-error "non-static data member" "" { target { ! c++11 } } 5 }
+};