diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-12-16 23:28:31 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-12-16 23:28:31 +0000 |
commit | 0007ff03b088aadc9623e17df257a3e2792d115e (patch) | |
tree | 9c1028159cc8fd9a8051ef7bd204a864eb61688e /gcc | |
parent | e0d475db10f8976060a964517a64cd7b4508cefa (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/friend12.C | 7 |
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 } +}; |