re PR c++/43081 (ICE with invalid in-class initializer)

gcc/cp/

2010-03-20  Simon Martin  <simartin@users.sourceforge.net>

	PR c++/43081:
	* decl2.c (grokfield): Handle invalid initializers for member
	functions.

gcc/testsuite/

2010-03-20  Simon Martin  <simartin@users.sourceforge.net>
	    Michael Matz  <matz@suse.de>

	PR c++/43081
	* g++.dg/parse/crash56.C: New test.

Co-Authored-By: Michael Matz <matz@suse.de>

From-SVN: r157597
This commit is contained in:
Simon Martin 2010-03-20 18:01:18 +00:00 committed by Simon Martin
parent 941ce52b94
commit 7801b86acf
4 changed files with 36 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2010-03-20 Simon Martin <simartin@users.sourceforge.net>
PR c++/43081:
* decl2.c (grokfield): Handle invalid initializers for member
functions.
2010-03-20 Dodji Seketeli <dodji@redhat.com>
PR c++/43375

View File

@ -908,8 +908,13 @@ grokfield (const cp_declarator *declarator,
}
else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
{
gcc_assert (error_operand_p (init) || integer_zerop (init));
DECL_PURE_VIRTUAL_P (value) = 1;
if (integer_zerop (init))
DECL_PURE_VIRTUAL_P (value) = 1;
else if (error_operand_p (init))
; /* An error has already been reported. */
else
error ("invalid initializer for member function %qD",
value);
}
else
{

View File

@ -1,3 +1,9 @@
2010-03-20 Simon Martin <simartin@users.sourceforge.net>
Michael Matz <matz@suse.de>
PR c++/43081
* g++.dg/parse/crash56.C: New test.
2010-03-20 Paul Thomas <pault@gcc.gnu.org>
PR fortran/43450

View File

@ -0,0 +1,17 @@
/* PR c++/43081 */
/* { dg-do "compile" } */
/* { dg-options "-std=c++0x" } */
struct A
{
typedef void (F)();
F f = []{}; /* { dg-error "invalid initializer" } */
};
struct B
{
typedef void (F)();
F f = 1; /* { dg-error "invalid initializer" } */
virtual F f2 = 2; /* { dg-error "invalid initializer" } */
F f3 = 3; /* { dg-error "invalid initializer" } */
};