re PR c++/29730 (ICE on invalid declaration of template member)

PR c++/29730
	* parser.c (cp_parser_init_declarator): Reject initialization of
	functions.
	PR c++/29730
	* g++.dg/template/crash64.C: New test.
	* g++.dg/parse/crash27.C: Adjust error markers.

From-SVN: r119601
This commit is contained in:
Mark Mitchell 2006-12-06 22:54:51 +00:00 committed by Mark Mitchell
parent 66863d89a1
commit 277264f80c
5 changed files with 35 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2006-12-06 Mark Mitchell <mark@codesourcery.com>
PR c++/29730
* parser.c (cp_parser_init_declarator): Reject initialization of
functions.
2006-12-05 Mark Mitchell <mark@codesourcery.com>
PR c++/29729

View File

@ -11311,9 +11311,23 @@ cp_parser_init_declarator (cp_parser* parser,
is_non_constant_init = true;
if (is_initialized)
{
if (function_declarator_p (declarator)
&& initialization_kind == CPP_EQ)
initializer = cp_parser_pure_specifier (parser);
if (function_declarator_p (declarator))
{
if (initialization_kind == CPP_EQ)
initializer = cp_parser_pure_specifier (parser);
else
{
/* If the declaration was erroneous, we don't really
know what the user intended, so just silently
consume the initializer. */
if (decl != error_mark_node)
error ("initializer provided for function");
cp_parser_skip_to_closing_parenthesis (parser,
/*recovering=*/true,
/*or_comma=*/false,
/*consume_paren=*/true);
}
}
else
initializer = cp_parser_initializer (parser,
&is_parenthesized_init,

View File

@ -1,3 +1,9 @@
2006-12-06 Mark Mitchell <mark@codesourcery.com>
PR c++/29730
* g++.dg/template/crash64.C: New test.
* g++.dg/parse/crash27.C: Adjust error markers.
2006-12-06 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/30009

View File

@ -3,6 +3,3 @@
void Dispatcher()
(__builtin_offsetof (ArgsType, largeMsgLen))
/* { dg-error "function " "function" { target *-*-* } 4 } */
/* { dg-error "expected type" "expected 1" { target *-*-* } 4 } */
/* { dg-error "expected `,' before" "expected 2" { target *-*-* } 4 } */
/* { dg-error "expected `\\\)" "expected 3" { target *-*-* } 4 } */

View File

@ -0,0 +1,6 @@
// PR c++/29730
struct A
{
template<int> void foo()(0); // { dg-error "initializer" }
};