Commit d219f3ff by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

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
parent 5b0f0db6
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> 2003-05-05 Jason Merrill <jason@redhat.com>
PR c++/9537 PR c++/9537
......
...@@ -4430,26 +4430,27 @@ build_unary_op (code, xarg, noconvert) ...@@ -4430,26 +4430,27 @@ build_unary_op (code, xarg, noconvert)
We could defer this in non-MS mode, but it's easier to give We could defer this in non-MS mode, but it's easier to give
a useful error here. */ 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))); tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
if (! flag_ms_extensions) 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 if (current_class_type
&& TREE_OPERAND (arg, 0) == current_class_ref) && TREE_OPERAND (arg, 0) == current_class_ref)
/* An expression like &memfn. */ /* An expression like &memfn. */
pedwarn ("ISO C++ forbids taking the address of an unqualified" pedwarn ("ISO C++ forbids taking the address of an unqualified"
" or parenthesized non-static member function to form" " or parenthesized non-static member function to form"
" a pointer to member function. Say `&%T::%D'", " a pointer to member function. Say `&%T::%D'",
TYPE_MAIN_VARIANT (base), name); base, name);
else else
pedwarn ("ISO C++ forbids taking the address of a bound member" pedwarn ("ISO C++ forbids taking the address of a bound member"
" function to form a pointer to member function." " function to form a pointer to member function."
" Say `&%T::%D'", " Say `&%T::%D'",
TYPE_MAIN_VARIANT (base), name); base, name);
} }
arg = build_offset_ref (base, name); arg = build_offset_ref (base, name);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment