re PR c++/10496 ([diagnostic] erroneus suggestion in diagnostic asks the user to write "&const class::memfun" which is illegal)

PR c++/10496
	* typeck.c (build_unary_op): Don't output const qualifier when
	output invalid pointer-to-member diagnostics.

	* g++.dg/warn/pmf1.C: New test.

From-SVN: r66481
This commit is contained in:
Kriang Lerdsuwanakij 2003-05-05 14:35:58 +00:00 committed by Kriang Lerdsuwanakij
parent 2c9d95efce
commit 16692dd506
4 changed files with 40 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2003-05-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/10496
* typeck.c (build_unary_op): Don't output const qualifier when
output invalid pointer-to-member diagnostics.
2003-05-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* decl.c: Fix typos.

View File

@ -4435,12 +4435,21 @@ build_unary_op (code, xarg, noconvert)
if (! flag_ms_extensions)
{
/* Inside constant member functions, the `this' pointer
contains an extra const qualifier. TYPE_MAIN_VARIANT
is used here to remove this const from the diagnostics. */
if (current_class_type
&& TREE_OPERAND (arg, 0) == current_class_ref)
/* An expression like &memfn. */
pedwarn ("ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say `&%T::%D'", base, name);
pedwarn ("ISO C++ forbids taking the address of an unqualified"
" or parenthesized non-static member function to form"
" a pointer to member function. Say `&%T::%D'",
TYPE_MAIN_VARIANT (base), name);
else
pedwarn ("ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'", base, name);
pedwarn ("ISO C++ forbids taking the address of a bound member"
" function to form a pointer to member function."
" Say `&%T::%D'",
TYPE_MAIN_VARIANT (base), name);
}
arg = build_offset_ref (base, name);
}

View File

@ -1,3 +1,8 @@
2003-05-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/10496
* g++.dg/warn/pmf1.C: New test.
2003-05-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/4494

View File

@ -0,0 +1,18 @@
// { dg-do compile }
// Origin: benko@sztaki.hu
// PR c++/10496: Incorrect pointer to member function diagnostics
// for constant member functions.
struct a
{
int f() const;
};
int
a::f() const
{
int (a::* b)() const = &f; // { dg-error "&a::f" }
}