diff options
author | Jason Merrill <jason@redhat.com> | 2011-10-14 15:12:57 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-10-14 15:12:57 -0400 |
commit | 7204877f43b9e70fbb357d26c43c3d26c5fbbc41 (patch) | |
tree | 6542094f1b586ed5ac897e344e5c00cfa331c050 | |
parent | 37d8632b512e4b4b04aea3f951f52af8bd440bfe (diff) | |
download | gcc-7204877f43b9e70fbb357d26c43c3d26c5fbbc41.zip gcc-7204877f43b9e70fbb357d26c43c3d26c5fbbc41.tar.gz gcc-7204877f43b9e70fbb357d26c43c3d26c5fbbc41.tar.bz2 |
re PR c++/50563 ([C++0x] Weird syntax acceptance rules for non-static data members initialized in place)
PR c++/50563
* parser.c (cp_parser_cache_group): Handle end==CPP_COMMA.
(cp_parser_save_nsdmi): Pass it.
From-SVN: r180003
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/parser.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C | 14 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b55e294..db16902 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-10-14 Jason Merrill <jason@redhat.com> + PR c++/50563 + * parser.c (cp_parser_cache_group): Handle end==CPP_COMMA. + (cp_parser_save_nsdmi): Pass it. + PR c++/50507 * method.c (walk_field_subobs): Check for NSDMI before complaining about uninitialized fields. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index cabe9aa..ea0c4dc 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -20617,7 +20617,8 @@ cp_parser_save_nsdmi (cp_parser* parser) cp_token *last; tree node; - cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0); + /* Save tokens until the next comma or semicolon. */ + cp_parser_cache_group (parser, CPP_COMMA, /*depth=*/0); last = parser->lexer->next_token; @@ -21719,6 +21720,12 @@ cp_parser_cache_group (cp_parser *parser, kind of syntax error. */ return true; + /* If we're caching something finished by a comma (or semicolon), + such as an NSDMI, don't consume the comma. */ + if (end == CPP_COMMA + && (token->type == CPP_SEMICOLON || token->type == CPP_COMMA)) + return false; + /* Consume the token. */ cp_lexer_consume_token (parser->lexer); /* See if it starts a new group. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80ef91c..ed5d30e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-10-14 Jason Merrill <jason@redhat.com> + PR c++/50563 + * g++.dg/cpp0x/nsdmi-list1.C: New. + PR c++/50507 * g++.dg/cpp0x/nsdmi-const1.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C new file mode 100644 index 0000000..526f29a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-list1.C @@ -0,0 +1,14 @@ +// PR c++/50563 +// { dg-options -std=c++0x } + +struct S1 { + int a{10}, b{20}; // OK +}; + +struct S2 { + int a, b = 20; // OK +}; + +struct S3 { + int a = 10, b = 20; +}; |