2009-03-27 Simon Martin <simartin@users.sourceforge.net>
PR c++/37647
* decl.c (grokdeclarator): Reject [con|de]stuctors in a non-class
scope.
gcc/testsuite/
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
PR c++/37647
* g++.dg/parse/ctor9.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145105
138bc75d-0d04-0410-961f-
82ee72b054a4
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
+ PR c++/37647
+ * decl.c (grokdeclarator): Reject [con|de]stuctors in a non-class
+ scope.
+
+2009-03-27 Simon Martin <simartin@users.sourceforge.net>
+
PR c++/29727
* decl.c (check_array_designated_initializer): Handle error_mark_node.
PR c++/29727
* decl.c (check_array_designated_initializer): Handle error_mark_node.
error ("virtual non-class function %qs", name);
virtualp = 0;
}
error ("virtual non-class function %qs", name);
virtualp = 0;
}
+ else if (sfk == sfk_constructor
+ || sfk == sfk_destructor)
+ {
+ error (funcdef_flag
+ ? "%qs defined in a non-class scope"
+ : "%qs declared in a non-class scope", name);
+ sfk = sfk_none;
+ }
}
else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
&& !NEW_DELETE_OPNAME_P (original_name))
}
else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
&& !NEW_DELETE_OPNAME_P (original_name))
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
2009-03-27 Simon Martin <simartin@users.sourceforge.net>
+ PR c++/37647
+ * g++.dg/parse/ctor9.C: New test.
+
+2009-03-27 Simon Martin <simartin@users.sourceforge.net>
+
PR c++/29727
* g++.dg/init/error2.C: New test.
PR c++/29727
* g++.dg/init/error2.C: New test.
--- /dev/null
+/* PR c++/37647 */
+/* { dg-do "compile" } */
+
+struct A
+{
+ A() { void A(); } /* { dg-error "return type specification for constructor invalid|non-class scope" } */
+};