diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4f74133..120247d 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 ad2fe25..c6ecf69 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 ee5615e..2c2443f 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 0000000..de9748d
--- /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;
+};