summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-28 08:53:03 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-06-28 08:53:03 +0000
commit2ec7ae7790f58b4d9232be16dc674c4aa13e9a7e (patch)
tree9619c90a5d8b194036c5bdf9c8b1b3f0c1031617
parent1832272c041cd7c656e7100de7a2522f5d5ecd76 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/parser.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist73.C13
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;
+};