7087658: MethodHandles.Lookup.findVirtual is confused by interface methods that are multiply inherited
john.r.rose at oracle.com
Tue May 7 17:25:59 PDT 2013
On May 7, 2013, at 2:27 PM, Christian Thalinger <christian.thalinger at oracle.com> wrote:
> On Mar 28, 2012, at 4:54 PM, John Rose <john.r.rose at oracle.com> wrote:
>> 7087658: MethodHandles.Lookup.findVirtual is confused by interface methods that are multiply inherited
>> This is a point fix for JDK 8, and will (pending approval) also be back-ported to JDK 7u.
> Why was this a point fix? Sorry, I can't remember. It seems we still have failures related to this bug.
IIRC it's a point fix because the JVM is at fault and the JDK code is hiding it. We need the lookup paths into the JVM to be cleaner, or these sorts of corner cases will not go away.
I now think the CallInfo cleanup is the right way to round up corner cases like this one. (Also invokespecial and invokestatic details on interfaces. Maybe also correct interaction with "overpass" methods generated by the JVM.)
Basically, if there is ad hoc code for tweaking lookups in MemberName.java or methodHandles.cpp we should regard it with suspicion. The best move forward is to get a clean call-through to the same LinkResolver API that the bytecode interpreter uses.
More information about the hotspot-compiler-dev