typeck.c (build_unary_op): Deal with const qualifier in invalid pointer-to-member earlier.

* typeck.c (build_unary_op): Deal with const qualifier in
	invalid pointer-to-member earlier.

From-SVN: r66522
This commit is contained in:
Kriang Lerdsuwanakij 2003-05-06 14:02:09 +00:00 committed by Kriang Lerdsuwanakij
parent 5b0f0db6d9
commit d219f3ff2f
2 changed files with 12 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2003-05-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* typeck.c (build_unary_op): Deal with const qualifier in
invalid pointer-to-member earlier.
2003-05-05 Jason Merrill <jason@redhat.com>
PR c++/9537

View File

@ -4430,26 +4430,27 @@ build_unary_op (code, xarg, noconvert)
We could defer this in non-MS mode, but it's easier to give
a useful error here. */
tree base = TREE_TYPE (TREE_OPERAND (arg, 0));
/* 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
and the created OFFSET_REF. */
tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
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'",
TYPE_MAIN_VARIANT (base), name);
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'",
TYPE_MAIN_VARIANT (base), name);
base, name);
}
arg = build_offset_ref (base, name);
}