diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2010-03-20 18:01:18 +0000 |
---|---|---|
committer | Simon Martin <simartin@users.sourceforge.net> | 2010-03-20 18:01:18 +0000 |
commit | 9ffa28c41e37d951fc6241649976f4d3f930ee3a (patch) | |
tree | bb74618da19c765250bb30f3606ee09f5f2e59a0 | |
parent | 4fd36605ee5dbcef83ea806dd0c3072533d1b0c0 (diff) |
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.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@157597 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash56.C | 17 |
4 files changed, 36 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 41fb7923a7e..5474df92503 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 4e4930af563..9da69e61595 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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 { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2f8f1a80f24..40608019eef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/parse/crash56.C b/gcc/testsuite/g++.dg/parse/crash56.C new file mode 100644 index 00000000000..a554babe99f --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash56.C @@ -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" } */ +}; |