From 71aea5f2e041c542c817a145644760fc0b2bb3d4 Mon Sep 17 00:00:00 2001 From: Simon Martin Date: Wed, 28 Mar 2007 21:06:01 +0000 Subject: [PATCH] re PR c++/29077 (Incorrect error message for destructor in wrong namespace) 2007-03-28 Simon Martin PR c++/29077 * decl.c (grokfndecl): Properly setup decl if it is a constructor or a destructor. From-SVN: r123312 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 21 +++++++++++++++------ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/constructor3.C | 14 ++++++++++++++ 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/constructor3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a2a0f6ef90c..4f2b06191ef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-03-28 Simon Martin + + PR c++/29077 + * decl.c (grokfndecl): Properly setup decl if it is a constructor or a + destructor. + 2007-03-28 Douglas Gregor * parser.c (struct cp_parser): Update comment for diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index ce1c54f10cd..0315f01241d 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5981,6 +5981,20 @@ grokfndecl (tree ctype, 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) { @@ -6168,12 +6182,7 @@ grokfndecl (tree ctype, 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, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b3b28b30527..9b5244e597f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-03-28 Simon Martin + + PR c++/29077 + * g++.dg/parse/constructor3.C: New test. + 2007-03-28 Eric Botcazou * gnat.dg/thin_pointer.ad[sb]: New test. diff --git a/gcc/testsuite/g++.dg/parse/constructor3.C b/gcc/testsuite/g++.dg/parse/constructor3.C new file mode 100644 index 00000000000..9a2e9783e3d --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/constructor3.C @@ -0,0 +1,14 @@ +/* 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" } */ +} -- 2.30.2