]> gcc.gnu.org Git - gcc.git/commitdiff
cp-tree.h (DELTA2_FROM_PTRMEMFUNC): Remove.
authorMark Mitchell <mark@codesourcery.com>
Fri, 13 Apr 2001 21:16:42 +0000 (21:16 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 13 Apr 2001 21:16:42 +0000 (21:16 +0000)
* cp-tree.h (DELTA2_FROM_PTRMEMFUNC): Remove.
(expand_ptremfunc_cst): Change prototype.
(delta2_from_ptrmemfunc): Remove.
* expr.c (cplus_expand_constant): Adjust call to
expand_ptrmemfunc_cst.
* typeck.c (build_ptrmemfunc1): Simplify.
(build_ptrmemfunc): Make sure that casting a PTRMEM_CST still
results in a constant.
(expand_ptrmemfunc_cst): Remove idx and delta2 parameters.
(delta2_from_ptrmemfunc): Remove.
(pfn_from_ptrmemfunc): Adjust call to expand_ptrmemfunc_cst.

From-SVN: r41341

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/expr.c
gcc/cp/typeck.c

index 0ae306fa069f8a3ce66b8840bb4b1ba49b9235d6..53616a3341ca1e0ff7d3f578acce86f2d837b8d7 100644 (file)
@@ -1,3 +1,17 @@
+2001-04-13  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-tree.h (DELTA2_FROM_PTRMEMFUNC): Remove.
+       (expand_ptremfunc_cst): Change prototype.
+       (delta2_from_ptrmemfunc): Remove.
+       * expr.c (cplus_expand_constant): Adjust call to
+       expand_ptrmemfunc_cst.
+       * typeck.c (build_ptrmemfunc1): Simplify.
+       (build_ptrmemfunc): Make sure that casting a PTRMEM_CST still
+       results in a constant.
+       (expand_ptrmemfunc_cst): Remove idx and delta2 parameters.
+       (delta2_from_ptrmemfunc): Remove.
+       (pfn_from_ptrmemfunc): Adjust call to expand_ptrmemfunc_cst.
+       
 2001-04-12  Jason Merrill  <jason_merrill@redhat.com>
 
        * cp-tree.h (decl_namespace_list): New macro.
index b1d3ee4c3dfd17e4aad1f05b0bf2d363e546ae8d..de82fa6981c50cc15da6ce04c5cb0a0a26f8ab37 100644 (file)
@@ -2688,8 +2688,7 @@ extern int flag_new_for_scope;
    hashed POINTER_TYPE, and can only be used on the POINTER_TYPE.  */
 #define TYPE_GET_PTRMEMFUNC_TYPE(NODE) ((tree)TYPE_LANG_SPECIFIC(NODE))
 #define TYPE_SET_PTRMEMFUNC_TYPE(NODE, VALUE) (TYPE_LANG_SPECIFIC(NODE) = ((struct lang_type *)(void*)(VALUE)))
-/* These are to get the delta2 and pfn fields from a TYPE_PTRMEMFUNC_P.  */
-#define DELTA2_FROM_PTRMEMFUNC(NODE) delta2_from_ptrmemfunc ((NODE))
+/* Returns the pfn field from a TYPE_PTRMEMFUNC_P.  */
 #define PFN_FROM_PTRMEMFUNC(NODE) pfn_from_ptrmemfunc ((NODE))
 
 /* For a pointer-to-member type of the form `T X::*', this is `X'.  */
@@ -4461,8 +4460,7 @@ extern int cp_has_mutable_p                     PARAMS ((tree));
 extern int at_least_as_qualified_p              PARAMS ((tree, tree));
 extern int more_qualified_p                     PARAMS ((tree, tree));
 extern tree build_ptrmemfunc1                   PARAMS ((tree, tree, tree));
-extern void expand_ptrmemfunc_cst               PARAMS ((tree, tree *, tree *, tree *, tree *));
-extern tree delta2_from_ptrmemfunc              PARAMS ((tree));
+extern void expand_ptrmemfunc_cst               PARAMS ((tree, tree *, tree *));
 extern tree pfn_from_ptrmemfunc                 PARAMS ((tree));
 extern tree type_after_usual_arithmetic_conversions PARAMS ((tree, tree));
 extern tree composite_pointer_type              PARAMS ((tree, tree, tree, tree,
index 9a9eb86f52645dae6f3879c1460b49ca6b8d39ed..6855160fc19070c66b8a7352f8b759c838ff6abc 100644 (file)
@@ -60,9 +60,10 @@ cplus_expand_constant (cst)
          }
        else
          {
-           tree delta, idx, pfn, delta2;
+           tree delta;
+           tree pfn;
 
-           expand_ptrmemfunc_cst (cst, &delta, &idx, &pfn, &delta2);
+           expand_ptrmemfunc_cst (cst, &delta, &pfn);
            cst = build_ptrmemfunc1 (type, delta, pfn);
          }
       }
index 139290bb166179d2114afbe02517f09562a64682..5371c0e99779b4884f9f8eea98f859c6154c7068 100644 (file)
@@ -6000,51 +6000,25 @@ build_ptrmemfunc1 (type, delta, pfn)
 {
   tree u = NULL_TREE;
   tree delta_field;
-  tree idx_field;
-  tree pfn_or_delta2_field;
   tree pfn_field;
-  tree delta2_field;
-  tree subtype;
-  int allconstant, allsimple;
 
   /* Pull the FIELD_DECLs out of the type.  */
   pfn_field = TYPE_FIELDS (type);
   delta_field = TREE_CHAIN (pfn_field);
-  idx_field = NULL_TREE;
-  pfn_or_delta2_field = NULL_TREE;
-  delta2_field = NULL_TREE;
-  subtype = NULL_TREE;
 
   /* Make sure DELTA has the type we want.  */
   delta = convert_and_check (delta_type_node, delta);
 
-  /* Keep track of whether the initializer is a) constant, and b) can
-     be done statically.  */
-  allconstant = TREE_CONSTANT (delta);
-  allsimple = (initializer_constant_valid_p (delta, TREE_TYPE (delta)) 
-              != NULL_TREE);
-
-  if (pfn)
-    {
-      /* A non-virtual function.  */
-      allconstant &= TREE_CONSTANT (pfn);
-      allsimple &= (initializer_constant_valid_p (pfn, TREE_TYPE (pfn)) 
-                   != NULL_TREE);
-    }
-  else
-    {
-      /* A virtual function.  */
-      allconstant &= TREE_CONSTANT (pfn);
-      allsimple &= (initializer_constant_valid_p (pfn, TREE_TYPE (pfn)) 
-                   != NULL_TREE);
-    }
-
   /* Finish creating the initializer.  */
   u = tree_cons (pfn_field, pfn,
                 build_tree_list (delta_field, delta));
   u = build (CONSTRUCTOR, type, NULL_TREE, u);
-  TREE_CONSTANT (u) = allconstant;
-  TREE_STATIC (u) = allconstant && allsimple;
+  TREE_CONSTANT (u) = TREE_CONSTANT (pfn) && TREE_CONSTANT (delta);
+  TREE_STATIC (u) = (TREE_CONSTANT (u)
+                    && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
+                        != NULL_TREE)
+                    && (initializer_constant_valid_p (delta, TREE_TYPE (delta)) 
+                        != NULL_TREE));
   return u;
 }
 
@@ -6071,7 +6045,7 @@ build_ptrmemfunc (type, pfn, force)
   /* Handle multiple conversions of pointer to member functions.  */
   if (TYPE_PTRMEMFUNC_P (TREE_TYPE (pfn)))
     {
-      tree delta = integer_zero_node;
+      tree delta = NULL_TREE;
       tree npfn = NULL_TREE;
       tree n;
 
@@ -6099,10 +6073,17 @@ build_ptrmemfunc (type, pfn, force)
       if (TREE_SIDE_EFFECTS (pfn))
        pfn = save_expr (pfn);
 
+      /* Obtain the function pointer and the current DELTA.  */
+      if (TREE_CODE (pfn) == PTRMEM_CST)
+       expand_ptrmemfunc_cst (pfn, &delta, &npfn);
+      else
+       {
+         npfn = build_component_ref (pfn, pfn_identifier, NULL_TREE, 0);
+         delta = build_component_ref (pfn, delta_identifier, NULL_TREE, 0);
+       }
+
       /* Under the new ABI, the conversion is easy.  Just adjust
         the DELTA field.  */
-      npfn = build_component_ref (pfn, pfn_identifier, NULL_TREE, 0);
-      delta = build_component_ref (pfn, delta_identifier, NULL_TREE, 0);
       delta = cp_convert (ptrdiff_type_node, delta);
       delta = cp_build_binary_op (PLUS_EXPR, delta, n);
       return build_ptrmemfunc1 (to_type, delta, npfn);
@@ -6133,12 +6114,10 @@ build_ptrmemfunc (type, pfn, force)
    integer_type_node.  */
 
 void
-expand_ptrmemfunc_cst (cst, delta, idx, pfn, delta2)
+expand_ptrmemfunc_cst (cst, delta, pfn)
      tree cst;
      tree *delta;
-     tree *idx;
      tree *pfn;
-     tree *delta2;
 {
   tree type = TREE_TYPE (cst);
   tree fn = PTRMEM_CST_MEMBER (cst);
@@ -6156,11 +6135,7 @@ expand_ptrmemfunc_cst (cst, delta, idx, pfn, delta2)
   *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0);
 
   if (!DECL_VIRTUAL_P (fn))
-    {
-      *idx = NULL_TREE;
-      *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
-      *delta2 = NULL_TREE;
-    }
+    *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
   else
     {
       /* If we're dealing with a virtual function, we have to adjust 'this'
@@ -6173,7 +6148,6 @@ expand_ptrmemfunc_cst (cst, delta, idx, pfn, delta2)
 
       /* Under the new ABI, we set PFN to the vtable offset, plus
         one, at which the function can be found.  */
-      *idx = NULL_TREE;
       *pfn = fold (build (MULT_EXPR, integer_type_node,
                          DECL_VINDEX (fn), 
                          TYPE_SIZE_UNIT (vtable_entry_type)));
@@ -6181,41 +6155,9 @@ expand_ptrmemfunc_cst (cst, delta, idx, pfn, delta2)
                          integer_one_node));
       *pfn = fold (build1 (NOP_EXPR, TYPE_PTRMEMFUNC_FN_TYPE (type),
                           *pfn));
-
-      /* Offset from an object of PTR_CLASS to the vptr for ORIG_CLASS.  */
-      *delta2 = fold (build (PLUS_EXPR, integer_type_node, *delta,
-                            get_vfield_offset (TYPE_BINFO (orig_class))));
     }
 }
 
-/* Return an expression for DELTA2 from the pointer-to-member function
-   given by T.  */
-
-tree
-delta2_from_ptrmemfunc (t)
-     tree t;
-{
-  my_friendly_assert (0, 20000221);
-
-  if (TREE_CODE (t) == PTRMEM_CST)
-    {
-      tree delta;
-      tree idx;
-      tree pfn;
-      tree delta2;
-      
-      expand_ptrmemfunc_cst (t, &delta, &idx, &pfn, &delta2);
-      if (delta2)
-       return delta2;
-    }
-
-  return (build_component_ref 
-         (build_component_ref (t,
-                               pfn_or_delta2_identifier, NULL_TREE,
-                               0), 
-          delta2_identifier, NULL_TREE, 0)); 
-}
-
 /* Return an expression for PFN from the pointer-to-member function
    given by T.  */
 
@@ -6226,11 +6168,9 @@ pfn_from_ptrmemfunc (t)
   if (TREE_CODE (t) == PTRMEM_CST)
     {
       tree delta;
-      tree idx;
       tree pfn;
-      tree delta2;
       
-      expand_ptrmemfunc_cst (t, &delta, &idx, &pfn, &delta2);
+      expand_ptrmemfunc_cst (t, &delta, &pfn);
       if (pfn)
        return pfn;
     }
This page took 0.113161 seconds and 5 git commands to generate.