aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Martin <simartin@users.sourceforge.net>2010-03-20 18:01:18 +0000
committerSimon Martin <simartin@users.sourceforge.net>2010-03-20 18:01:18 +0000
commit9ffa28c41e37d951fc6241649976f4d3f930ee3a (patch)
treebb74618da19c765250bb30f3606ee09f5f2e59a0
parent4fd36605ee5dbcef83ea806dd0c3072533d1b0c0 (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/ChangeLog6
-rw-r--r--gcc/cp/decl2.c9
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/parse/crash56.C17
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" } */
+};