From 59e7c84ca11369f80c0b30c330544678a41aa54c Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Fri, 23 Dec 2005 17:10:37 +0000 Subject: [PATCH] decl.c (grokdeclarator): Improve diagnostic for friend declarations of class members. * decl.c (grokdeclarator): Improve diagnostic for friend declarations of class members. * g++.dg/other/friend4.C: New test. From-SVN: r109017 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 11 ++++++++--- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/other/friend4.C | 8 ++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/other/friend4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5d90619..6a6090a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2005-12-23 Volker Reichelt + + * decl.c (grokdeclarator): Improve diagnostic for friend + declarations of class members. + 2005-12-22 Mark Mitchell PR c++/25369 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 447e98d..8a7688e 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7609,8 +7609,13 @@ grokdeclarator (const cp_declarator *declarator, } if (ctype == current_class_type) - pedwarn ("extra qualification %<%T::%> on member %qs", - ctype, name); + { + if (friendp) + pedwarn ("member functions are implicitly friends of their class"); + else + pedwarn ("extra qualification %<%T::%> on member %qs", + ctype, name); + } else if (TREE_CODE (type) == FUNCTION_TYPE) { tree sname = declarator->u.id.unqualified_name; @@ -8183,7 +8188,7 @@ grokdeclarator (const cp_declarator *declarator, { /* Friends are treated specially. */ if (ctype == current_class_type) - warning (0, "member functions are implicitly friends of their class"); + ; /* We already issued a pedwarn. */ else if (decl && DECL_NAME (decl)) { if (template_class_depth (current_class_type) == 0) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a61ab6f..3265ba5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-12-23 Volker Reichelt + + * g++.dg/other/friend4.C: New test. + 2005-12-23 Jakub Jelinek PR target/25005 diff --git a/gcc/testsuite/g++.dg/other/friend4.C b/gcc/testsuite/g++.dg/other/friend4.C new file mode 100644 index 0000000..537643d --- /dev/null +++ b/gcc/testsuite/g++.dg/other/friend4.C @@ -0,0 +1,8 @@ +// Origin: Volker Reichelt +// Misleading diagnostic + +struct A +{ + friend void A::foo(); // { dg-error "implicitly friends" } + friend A::~A(); // { dg-error "implicitly friends" } +}; -- 2.7.4