typeck.c (get_member_function_from_ptrfunc): Don't clobber delta.
authorAlexandre Oliva <aoliva@redhat.com>
Sun, 10 Jun 2001 21:50:40 +0000 (21:50 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Sun, 10 Jun 2001 21:50:40 +0000 (21:50 +0000)
* typeck.c (get_member_function_from_ptrfunc) [vbit_in_delta]:
Don't clobber delta.
(expand_ptrmemfunc_cst) [ptrmemfunc_vbit_in_delta]: Adjust pfn.

From-SVN: r43156

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

index f4527206cb708b86637616ee8a92c595f1455a98..02fb550c69a0a74d49ba903112b0256990859b93 100644 (file)
@@ -1,3 +1,9 @@
+2001-06-10  Alexandre Oliva  <aoliva@redhat.com>
+
+       * typeck.c (get_member_function_from_ptrfunc) [vbit_in_delta]:
+       Don't clobber delta.
+       (expand_ptrmemfunc_cst) [ptrmemfunc_vbit_in_delta]: Adjust pfn.
+
 2001-06-10  Mark Mitchell <mark@codesourcery.com>
            Gabriel Dos Reis  <gdr@codesourcery.com>
 
index 3c2ea8d9666846ff5dc3e24d2f4c6399e27820a7..38deeeecad0f2efa381753185e74ac8da8e98147 100644 (file)
@@ -2937,9 +2937,6 @@ get_member_function_from_ptrfunc (instance_ptrptr, function)
          abort ();
        }
 
-      delta = cp_convert (ptrdiff_type_node,
-                         build_component_ref (function, delta_identifier,
-                                              NULL_TREE, 0));
       /* DELTA2 is the amount by which to adjust the `this' pointer
         to find the vtbl.  */
       delta2 = delta;
@@ -6175,12 +6172,12 @@ expand_ptrmemfunc_cst (cst, delta, pfn)
         ptrmemfunc_vbit_in_delta, in which case delta is shifted
         left, and then incremented).  */
       *pfn = DECL_VINDEX (fn);
+      *pfn = fold (build (MULT_EXPR, integer_type_node, *pfn,
+                         TYPE_SIZE_UNIT (vtable_entry_type)));
 
       switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
        {
        case ptrmemfunc_vbit_in_pfn:
-         *pfn = fold (build (MULT_EXPR, integer_type_node, *pfn,
-                             TYPE_SIZE_UNIT (vtable_entry_type)));
          *pfn = fold (build (PLUS_EXPR, integer_type_node, *pfn,
                              integer_one_node));
          break;