From 8d7f862cfb3846ee764e9ec4fbe4fbb3d3ceaace Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 4 Jan 1999 11:55:37 +0000 Subject: [PATCH] tree.c (bound_pmf_p): New fn. * tree.c (bound_pmf_p): New fn. * typeck.c (build_c_cast): Use it. From-SVN: r24481 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/tree.c | 11 +++++++++++ gcc/cp/typeck.c | 5 ++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 372104326a4..d120ab58967 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 1999-01-04 Jason Merrill + * tree.c (bound_pmf_p): New fn. + * typeck.c (build_c_cast): Use it. + * decl.c (grok_op_properties): Use same_type_p. Tue Dec 22 15:09:25 1998 Kaveh R. Ghazi diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 8777a119412..b5b73cb631f 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1338,6 +1338,17 @@ get_first_fn (from) return OVL_CURRENT (from); } +/* Returns nonzero if T is a ->* or .* expression that refers to a + member function. */ + +int +bound_pmf_p (t) + tree t; +{ + return (TREE_CODE (t) == OFFSET_REF + && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (t, 1)))); +} + /* Return a new OVL node, concatenating it with the old one. */ tree diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index f9c2057e249..b0b3be9311c 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -5630,10 +5630,9 @@ build_c_cast (type, expr) { if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE || (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE - /* Don't do the default conversion if we want a - pointer to a function. */ + /* Don't do the default conversion on a ->* expression. */ && ! (TREE_CODE (type) == POINTER_TYPE - && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)) + && bound_pmf_p (value))) || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE || TREE_CODE (TREE_TYPE (value)) == REFERENCE_TYPE) value = default_conversion (value);