RFR (M) JDK-8033150 (#2): invokestatic: IncompatibleClassChangeError trying to invoke static method from a parent in presence of conflicting defaults
Lois Foltan
lois.foltan at oracle.com
Fri Apr 11 20:08:23 UTC 2014
On 4/11/2014 12:58 PM, Karen Kinnear wrote:
> Lois,
>
> I like the enum change. I agree with Coleen's suggestion of leaving
> out the vmstructs change.
>
> I had one question - instanceKlass.cll uncached_lookup_method -
> would it make sense to have a local holding the mode rather than
> overwriting the input argument of
> mode? Wouldn't that be better as a const input argument?
Hi Karen,
Thanks for the review! Glad the enum change seems to be well liked. I
have completed removing the vmStructs change. I have also taken your
suggestion and implemented a local variable within
InstanceKlass::uncached_lookup_method() to contain the incoming
MethodLookupMode parameter. So far my sanity testing on these minor
changes is going well.
In case anyone wants to view the updated webrev, it is at
http://cr.openjdk.java.net/~lfoltan/bug_jdk8033150.2/
Lois
>
> thanks,
> Karen
>
> On Apr 11, 2014, at 9:04 AM, Lois Foltan wrote:
>
>>
>> Please review the updated fix, webrev at:
>> http://cr.openjdk.java.net/~lfoltan/bug_jdk8033150.1/
>>
>> This includes Keith's suggestion below. All testing has been rerun
>> successfully.
>>
>> Thank you,
>> Lois
>>
>>
>> On 3/31/2014 3:51 PM, Lois Foltan wrote:
>>>
>>> On 3/31/2014 2:08 PM, Keith McGuigan wrote:
>>>> Hi Lois,
>>>>
>>>> I think that looks good. I like it much better than doing the
>>>> static method check in the default method processing.
>>>> My only suggestion is that it would be nice to encode new parameter
>>>> to uncached_lookup_method to be some sort of enum instead of a
>>>> boolean, so that it is obvious from the call-site what the behavior
>>>> should be (having just "false" in the parameter list requires you
>>>> to reference back to the declaration to figure out what that
>>>> "false" means).
>>>>
>>>> So instead of:
>>>> uncached_lookup_method(field_name, field_sig, false);
>>>> It'd be:
>>>> uncached_lookup_method(field_name, field_sig, NORMAL); or
>>>> uncached_lookup_method(field_name, field_sig, IGNORE_OVERPASS);
>>>>
>>>> (or something like that -- I'm no good at names).
>>>
>>> Thank you Keith. Good suggestion. I will implement and repost an
>>> updated webrev for review.
>>> Lois
>>>
>>>>
>>>> --
>>>> - Keith
>>>>
>>>>
>>>> On Mon, Mar 31, 2014 at 1:25 PM, Lois Foltan
>>>> <lois.foltan at oracle.com <mailto:lois.foltan at oracle.com>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> Please review the following fix:
>>>>
>>>> Webrev:
>>>> http://cr.openjdk.java.net/~lfoltan/bug_jdk8033150/
>>>> <http://cr.openjdk.java.net/%7Elfoltan/bug_jdk8033150/>
>>>>
>>>> Bug: invokestatic: IncompatibleClassChangeError trying to
>>>> invoke static method from a parent in presence of conflicting
>>>> defaults
>>>> https://bugs.openjdk.java.net/browse/JDK-8033150
>>>>
>>>> Summary of fix:
>>>> During default method processing, determine_target(), is
>>>> responsible for making decisions on whether
>>>> to create and add an overpass method to the current class for
>>>> issues that have been encountered during the walk
>>>> of the default methods. The routine
>>>> defaultMethods.cpp/has_matching_static() helped determine this
>>>> decision by looking within the current class for a static
>>>> method that should be preferred during method
>>>> resolution over an overpass method being created. However,
>>>> has_matching_static() did not continue to
>>>> look for a static method in current class' superclasses which
>>>> JDK-8033150 exposed.
>>>>
>>>> After looking at the code more closely, the has
>>>> _matching_static() concept is being moved out out of default
>>>> method processing and into method resolution processing. The
>>>> primary reason for this is to allow
>>>> default method processing to match method selection where
>>>> statics are and should be ignored. According
>>>> to JVMS, static methods should only be preferred over an
>>>> overpass method at method and interface
>>>> method resolution time. To enable method resolution to
>>>> potentially find a static method over an overpass
>>>> method, a new parameter "ignore_overpass" was added to
>>>> InstanceKlass::uncached_lookup_method().
>>>> It has the affect of indicating to find_method_index() to
>>>> ignore overpass methods and continue the search
>>>> in case a static method of the same name and signature is
>>>> present in the current class or its superclasses.
>>>>
>>>> Tests:
>>>> - jtreg hotspot/test/*, JDK java.lang & java.util,
>>>> vm.quick.testlist, JCK lang & vm, defmeth tests
>>>> - Test will be added to the defmeth test system
>>>>
>>>> Thank you,
>>>> Lois
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20140411/709458c0/attachment.html>
More information about the hotspot-runtime-dev
mailing list