Commit fbf6f1ba by Jason Merrill Committed by Jason Merrill

typeck.c (build_unary_op): Handle taking the address of a unique bound non-static member function.

	* typeck.c (build_unary_op): Handle taking the address of a unique
	bound non-static member function.

From-SVN: r26451
parent 613f2fe6
1999-04-14 Jason Merrill <jason@yorick.cygnus.com>
* typeck.c (build_unary_op): Handle taking the address of a unique
bound non-static member function.
1999-04-13 Martin von Loewis <loewis@informatik.hu-berlin.de> 1999-04-13 Martin von Loewis <loewis@informatik.hu-berlin.de>
* lang-options.h (-Wdeprecated): New flag. * lang-options.h (-Wdeprecated): New flag.
......
...@@ -4685,6 +4685,28 @@ build_unary_op (code, xarg, noconvert) ...@@ -4685,6 +4685,28 @@ build_unary_op (code, xarg, noconvert)
return build1 (ADDR_EXPR, unknown_type_node, arg); return build1 (ADDR_EXPR, unknown_type_node, arg);
} }
if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
&& OVL_NEXT (TREE_OPERAND (arg, 1)) == NULL_TREE)
{
/* They're trying to take the address of a unique non-static
member function. This is ill-formed, but let's try to DTRT. */
tree base, name;
if (current_class_type
&& TREE_OPERAND (arg, 0) == current_class_ref)
/* An expression like &memfn. */
pedwarn ("taking the address of a non-static member function");
else
pedwarn ("taking the address of a bound member function");
base = TREE_TYPE (TREE_OPERAND (arg, 0));
name = DECL_NAME (OVL_CURRENT (TREE_OPERAND (arg, 1)));
cp_pedwarn (" to form a pointer to member function, say `&%T::%D'",
base, name);
arg = build_offset_ref (base, name);
}
if (type_unknown_p (arg)) if (type_unknown_p (arg))
return build1 (ADDR_EXPR, unknown_type_node, arg); return build1 (ADDR_EXPR, unknown_type_node, arg);
......
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