aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/decl2.c
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-07-10 09:02:06 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-07-10 09:02:06 +0000
commit633221dbab4b06bae16c5cd3b6da0c91608fb5ff (patch)
tree76650e1120092ea70d8d68f3ac66639be6583a19 /gcc/cp/decl2.c
parent31c56a8ba7c10ccacfa1f3566d8eb16dddadbfd2 (diff)
downloadgcc-633221dbab4b06bae16c5cd3b6da0c91608fb5ff.zip
gcc-633221dbab4b06bae16c5cd3b6da0c91608fb5ff.tar.gz
gcc-633221dbab4b06bae16c5cd3b6da0c91608fb5ff.tar.bz2
PR c++ 9483
cp: PR c++ 9483 * class.c (check_field_decls): Pass DECL_NAME to constructor_name_p. * decl2.c (constructor_name_p): Avoid repeated constructor_name calls. * decl.c (grokdeclarator): Refactor ctor/dtor detection. testsuite: PR c++ 9483 * g++.dg/other/field1.C: New test. From-SVN: r69180
Diffstat (limited to 'gcc/cp/decl2.c')
-rw-r--r--gcc/cp/decl2.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index c77e503..9a0185b 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -1190,8 +1190,21 @@ constructor_name (tree type)
bool
constructor_name_p (tree name, tree type)
{
- return (name == constructor_name (type)
- || name == constructor_name_full (type));
+ tree ctor_name;
+
+ if (!name)
+ return false;
+
+ if (TREE_CODE (name) != IDENTIFIER_NODE)
+ return false;
+
+ ctor_name = constructor_name_full (type);
+ if (name == ctor_name)
+ return true;
+ if (IDENTIFIER_TEMPLATE (ctor_name)
+ && name == IDENTIFIER_TEMPLATE (ctor_name))
+ return true;
+ return false;
}