--- old/src/share/classes/sun/reflect/MethodAccessorGenerator.java 2013-09-12 13:37:36.971945000 -0400 +++ new/src/share/classes/sun/reflect/MethodAccessorGenerator.java 2013-09-12 13:37:36.068561000 -0400 @@ -27,6 +27,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; +import java.lang.reflect.*; /** Generator for sun.reflect.MethodAccessor and sun.reflect.ConstructorAccessor objects using bytecodes to @@ -377,7 +378,7 @@ asm.emitShort(NUM_METHODS); emitConstructor(); - emitInvoke(); + emitInvoke(modifiers); // Additional attributes (none) asm.emitShort(S0); @@ -409,7 +410,7 @@ } /** This emits the code for either invoke() or newInstance() */ - private void emitInvoke() { + private void emitInvoke(int modifiers) { // NOTE that this code will only handle 65535 parameters since we // use the sipush instruction to get the array index on the // operand stack. @@ -639,10 +640,14 @@ typeSizeInStackSlots(returnType)); } else { if (isInterface()) { - cb.opc_invokeinterface(targetMethodRef, - count, - count, - typeSizeInStackSlots(returnType)); + if (Modifier.isPrivate(modifiers)) { + cb.opc_invokespecial(targetMethodRef, count, 0); + } else { + cb.opc_invokeinterface(targetMethodRef, + count, + count, + typeSizeInStackSlots(returnType)); + } } else { cb.opc_invokevirtual(targetMethodRef, count,