diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-06-28 08:53:03 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-06-28 08:53:03 +0000 |
commit | 2ec7ae7790f58b4d9232be16dc674c4aa13e9a7e (patch) | |
tree | 9619c90a5d8b194036c5bdf9c8b1b3f0c1031617 | |
parent | 1832272c041cd7c656e7100de7a2522f5d5ecd76 (diff) | |
download | gcc-2ec7ae7790f58b4d9232be16dc674c4aa13e9a7e.tar.gz |
/cp
2013-06-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/57682
* parser.c (cp_parser_save_member_function_body): Handle correctly
curly braces in function-try-block mem-initializers.
/testsuite
2013-06-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/57682
* g++.dg/cpp0x/initlist73.C: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@200504 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist73.C | 13 |
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4f74133c2e7..120247d641e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-06-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57682 + * parser.c (cp_parser_save_member_function_body): Handle correctly + curly braces in function-try-block mem-initializers. + 2013-06-27 Marc Glisse <marc.glisse@inria.fr> PR c++/57509 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index ad2fe257731..c6ecf69e50e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -22798,12 +22798,14 @@ cp_parser_save_member_function_body (cp_parser* parser, /* Save away the tokens that make up the body of the function. */ first = parser->lexer->next_token; + /* Handle function try blocks. */ + if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY)) + cp_lexer_consume_token (parser->lexer); /* We can have braced-init-list mem-initializers before the fn body. */ if (cp_lexer_next_token_is (parser->lexer, CPP_COLON)) { cp_lexer_consume_token (parser->lexer); - while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE) - && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY)) + while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)) { /* cache_group will stop after an un-nested { } pair, too. */ if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ee5615e4817..2c2443f6a1e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-06-28 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57682 + * g++.dg/cpp0x/initlist73.C: New. + 2013-06-27 Meador Inge <meadori@codesourcery.com> * gcc.dg/atomic-flag.c: Add dg-require-effective-target sync_*. diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist73.C b/gcc/testsuite/g++.dg/cpp0x/initlist73.C new file mode 100644 index 00000000000..de9748d8b90 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist73.C @@ -0,0 +1,13 @@ +// PR c++/57682 +// { dg-do compile { target c++11 } } + +struct Class +{ + Class (int func) + try + : f { func } { } + catch ( ... ) { } + +private: + int f; +}; |