+2007-03-28 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/29077
+ * decl.c (grokfndecl): Properly setup decl if it is a constructor or a
+ destructor.
+
2007-03-28 Douglas Gregor <doug.gregor@gmail.com>
* parser.c (struct cp_parser): Update comment for
if (TYPE_VOLATILE (type))
TREE_THIS_VOLATILE (decl) = 1;
+ /* Setup decl according to sfk. */
+ switch (sfk)
+ {
+ case sfk_constructor:
+ case sfk_copy_constructor:
+ DECL_CONSTRUCTOR_P (decl) = 1;
+ break;
+ case sfk_destructor:
+ DECL_DESTRUCTOR_P (decl) = 1;
+ break;
+ default:
+ break;
+ }
+
if (friendp
&& TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
{
return decl;
if (ctype != NULL_TREE)
- {
- if (sfk == sfk_constructor)
- DECL_CONSTRUCTOR_P (decl) = 1;
-
- grokclassfn (ctype, decl, flags);
- }
+ grokclassfn (ctype, decl, flags);
decl = check_explicit_specialization (orig_declarator, decl,
template_count,
+2007-03-28 Simon Martin <simartin@users.sourceforge.net>
+
+ PR c++/29077
+ * g++.dg/parse/constructor3.C: New test.
+
2007-03-28 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/thin_pointer.ad[sb]: New test.
--- /dev/null
+/* PR c++/29077 */
+/* { dg-do "compile" } */
+
+class c {
+ c();
+ c(const c&);
+ ~c();
+};
+
+namespace m {
+ c::c() {} /* { dg-error "c::c" } */
+ c::c(const c&) {} /* { dg-error "c::c" } */
+ c::~c() {} /* { dg-error "c::~c" } */
+}