* tree.c (bound_pmf_p): New fn.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Jan 1999 11:55:37 +0000 (11:55 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Jan 1999 11:55:37 +0000 (11:55 +0000)
* typeck.c (build_c_cast): Use it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24481 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/cp/typeck.c

index 3721043..d120ab5 100644 (file)
@@ -1,5 +1,8 @@
 1999-01-04  Jason Merrill  <jason@yorick.cygnus.com>
 
+       * 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  <ghazi@caip.rutgers.edu>
index 8777a11..b5b73cb 100644 (file)
@@ -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
index f9c2057..b0b3be9 100644 (file)
@@ -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);