In my 56104 patch I failed to notice that in the ARM (vbit in delta) case, we need to adjust the delta even if we know we're doing a non-virtual call.

Tested x86_64-pc-linux-gnu, applying to trunk.

commit 6a52d34876377448990d550cb763171180f44444
Author: Jason Merrill <ja...@redhat.com>
Date:   Thu Jan 31 09:45:49 2013 -0500

    	PR c++/56162
    	PR c++/56104
    	* typeck.c (get_member_function_from_ptrfunc): Fix
    	ptrmemfunc_vbit_in_delta case.

diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index bfac394..688c266 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -3176,9 +3176,7 @@ get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function,
       e3 = pfn_from_ptrmemfunc (function);
       delta = delta_from_ptrmemfunc (function);
       idx = build1 (NOP_EXPR, vtable_index_type, e3);
-      if (nonvirtual)
-	e1 = integer_zero_node;
-      else switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
+      switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
 	{
 	case ptrmemfunc_vbit_in_pfn:
 	  e1 = cp_build_binary_op (input_location,

Reply via email to