aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorAdam Butcher <adam@jessamine.co.uk>2014-01-06 18:22:38 +0000
committerAdam Butcher <abutcher@gcc.gnu.org>2014-01-06 18:22:38 +0000
commit2418d7da3a08b5ea0c2e59a2e078193b70980b48 (patch)
tree98f27766ce9d3705e0c917a0c5c88bda27448558 /gcc/cp
parent81fdaa176d937936a21bb3e42eb482f042f42b77 (diff)
downloadgcc-2418d7da3a08b5ea0c2e59a2e078193b70980b48.zip
gcc-2418d7da3a08b5ea0c2e59a2e078193b70980b48.tar.gz
gcc-2418d7da3a08b5ea0c2e59a2e078193b70980b48.tar.bz2
re PR c++/59629 ([c++11] ICE with invalid use of auto in lambda function)
Fix PR c++/59629 PR c++/59629 * cp/parser.c (cp_parser_lambda_expression): Save/reset/restore auto_is_implicit_function_template_parm_p around lambda body. * g++.dg/cpp1y/pr59629.C: New testcase. From-SVN: r206370
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/parser.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3322897..c585946 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -8,6 +8,10 @@
* cp/parser.c (cp_parser_template_parameter): Early out with
error_mark_node if parameter declaration was not parsed.
+ PR c++/59629
+ * cp/parser.c (cp_parser_lambda_expression): Save/reset/restore
+ auto_is_implicit_function_template_parm_p around lambda body.
+
2014-01-03 Marc Glisse <marc.glisse@inria.fr>
PR c++/58950
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 4d97026..6668f2c 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -8738,6 +8738,8 @@ cp_parser_lambda_expression (cp_parser* parser)
= parser->fully_implicit_function_template_p;
tree implicit_template_parms = parser->implicit_template_parms;
cp_binding_level* implicit_template_scope = parser->implicit_template_scope;
+ bool auto_is_implicit_function_template_parm_p
+ = parser->auto_is_implicit_function_template_parm_p;
parser->num_template_parameter_lists = 0;
parser->in_statement = 0;
@@ -8745,6 +8747,7 @@ cp_parser_lambda_expression (cp_parser* parser)
parser->fully_implicit_function_template_p = false;
parser->implicit_template_parms = 0;
parser->implicit_template_scope = 0;
+ parser->auto_is_implicit_function_template_parm_p = false;
/* By virtue of defining a local class, a lambda expression has access to
the private variables of enclosing classes. */
@@ -8772,6 +8775,8 @@ cp_parser_lambda_expression (cp_parser* parser)
= fully_implicit_function_template_p;
parser->implicit_template_parms = implicit_template_parms;
parser->implicit_template_scope = implicit_template_scope;
+ parser->auto_is_implicit_function_template_parm_p
+ = auto_is_implicit_function_template_parm_p;
}
pop_deferring_access_checks ();