From: Paolo Carlini Date: Wed, 5 Sep 2007 09:31:54 +0000 (+0000) Subject: PR c++/29731 (again) X-Git-Tag: releases/gcc-4.3.0~2876 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=03ba2e11227bfe13580b80367feeb196035109ed;p=thirdparty%2Fgcc.git PR c++/29731 (again) /cp 2007-09-05 Paolo Carlini PR c++/29731 (again) * parser.c (cp_parser_primary_expression): Return error_mark_node when a statement-expression is found in a template-argument list. /testsuite 2007-09-05 Paolo Carlini PR c++/29731 * g++.dg/parse/template24.C: New. From-SVN: r128124 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ab7cb5ffea40..2d261e7381b0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-09-05 Paolo Carlini + + PR c++/29731 (again) + * parser.c (cp_parser_primary_expression): Return error_mark_node + when a statement-expression is found in a template-argument list. + 2007-09-04 Jason Merrill PR c++/31419 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index d39721e78fb6..9f967177351d 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -3166,9 +3166,11 @@ cp_parser_primary_expression (cp_parser *parser, int i = ({ int j = 3; j + 1; }); at class or namespace scope. */ - if (!parser->in_function_body) + if (!parser->in_function_body + || parser->in_template_argument_list_p) { - error ("statement-expressions are allowed only inside functions"); + error ("statement-expressions are not allowed outside " + "functions nor in template-argument lists"); cp_parser_skip_to_end_of_block_or_statement (parser); expr = error_mark_node; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3ae76e319e0b..aa4306bcb41e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-09-05 Paolo Carlini + + PR c++/29731 + * g++.dg/parse/template24.C: New. + 2007-09-04 Andrew Pinski * g++.dg/other/spu2vmx-1.C: New test. diff --git a/gcc/testsuite/g++.dg/parse/template24.C b/gcc/testsuite/g++.dg/parse/template24.C new file mode 100644 index 000000000000..33d9d4cfd5a4 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/template24.C @@ -0,0 +1,8 @@ +/* PR c++/29731. This used to ICE in uses_template_parms. */ + +template struct A {}; + +void foo() +{ + A<({})> a; /* { dg-error "forbids braced-groups within expressions|statement-expressions|template argument 1 is invalid|invalid type" } */ +}