RFR: 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE

Coleen Phillimore coleen.phillimore at oracle.com
Thu Jan 14 21:55:27 UTC 2016



On 1/14/16 2:57 PM, Yumin Qi wrote:
> Hi, Vladimir
>
>   I will integrate the current version, filed a new bug to follow the 
> existing issue: asm should generate correct code for invoking an 
> interface static method handle.
>   https://bugs.openjdk.java.net/browse/JDK-8147419
>
>
>   Latest ASM version is 5.0.4, I could not see the problem is addressed.
>   http://asm.ow2.org/history.html
>
>   The testcases in defmethod will be kept. When this problem solved 
> in  ASM, we can remove the relax in hotspot under the new bug 8147419.

I don't understand this.  Will these testcases in defmeth fail like they 
did in https://bugs.openjdk.java.net/browse/JDK-8143320 (ie. 100s of tests?)

Or was the failure because of the check that you relax for 8147419 .

Obviously you can't check it in if you get 100s of test failures.

Is https://bugs.openjdk.java.net/browse/JDK-8143317 fix reviewed and 
will be checked in before this change?

This change still looks good to me but the test issues should be 
resolved before you check it in.
>
>   Coleen, how about this plan? Comment please.

That's what I think.

Coleen

>
>   Thanks
>   Yumin
>
> On 1/14/2016 2:51 AM, Vladimir Ivanov wrote:
>> Yumin,
>>
>> Please, file a follow-up bug for the missing check (interface static 
>> method referenced by a MethodHandle). We shouldn't leave it half-fixed.
>>
>> I'd prefer to keep the original VM fix and quarantine affected tests 
>> until ASM is fixed, but 2-phase fix is also fine with me.
>>
>> Not sure how to handle ASM problem. Is the problem present in the 
>> latest ASM version?
>>
>> The best way would be to get it fixed upstream first and then sync 
>> internal copy with upstream. defmeth tests use the library bundled 
>> with the JDK.
>>
>> Best regards,
>> Vladimir Ivanov
>>
>> On 12/21/15 9:52 PM, Yumin Qi wrote:
>>> Please review:
>>>
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8145148
>>> webrev:http://cr.openjdk.java.net/~minqi/8145148/webrev-01/
>>>
>>> This is REDO for bug 8087223, which was backed out due to failed on
>>> 8143317 and 8143320.
>>> The defmeth encoutered new failures after the fix, which now has 
>>> correct
>>> constant tags. The test bugs will be addressed in 8143320, which based
>>> on vm/runtime/defmeth and 8143317, which in jdk/test.
>>>
>>> One difference from the attached for this webrev is that in 
>>> MethodHandle
>>> resolution, I relax the check for one specific case: Using MethodHandle
>>> to invoke static default interface method. In this case, we must use
>>> invokestatic (JVM_REF_invokeStatic), which in defmeth it will generate
>>> method tag for interface which violates JVMS-5.4.3.3 (it should create
>>> interface method tag!).  ASM currently has no API to generate
>>> invokeinterface for a interface static default method through
>>> MethodHandle invocation.
>>>
>>> Tests: JPRT, runtime quick test list (the fixed version for 8143320).
>>> Note the fix still fails 8143320 and 8143317 which are not fixed at the
>>> momment.
>>>
>>>
>>> Thanks
>>> Yumin
>>>
>>>
>>> Original post:
>>> ----------------------------------------------------------------------------------------------------------------------------------------------------- 
>>>
>>>
>>> Please review:
>>>
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8087223
>>> webrev: http://cr.openjdk.java.net/~minqi/8087223/webrev-02/
>>>
>>> According to JVMS-8:
>>>
>>> JVMS-5.4.3.3 Method Resolution:
>>>   " If C is an interface, method resolution throws an
>>> IncompatibleClassChangeError."
>>> JVMS-5.4.3.4 Interface Method Resolution:
>>>   "If C is not an interface, interface method resolution throws an
>>> IncompatibleClassChangeError"
>>>
>>> When invoke a method with resolved to an interface method, or invoke a
>>> interface method with resolved to an instance method,  ICCE should be
>>> thrown. The case usually happens when using tools like asmtools or
>>> jdk.internal.org.objectweb.asm to generate java bytecode.
>>>
>>> The fix is carrying the constantTag for the method at call and check if
>>> tag is consistent with the method called. Doing this by adding a member
>>> of constantTag, _tag,  to LinkInfo, and check tag in resolve functions
>>> to see if tag matched with the correct method.
>>>
>>> The fix solved the problem when call is from interpreter and compiler,
>>> bug for MethodHandle invoke, which should be addressed in another bug,
>>> since the MethodHandle does not come with a byte stream and getting the
>>> constant pool index at the invoke is not possible.  It will be 
>>> addressed
>>> in another bug.
>>>
>>> Tests: test case (added, minor modified from bug), JPRT, rutime quick
>>> test list(in progress).
>>> manually tested:  1) -Xint
>>>                                 2) -Xcomp
>>>                                 3) -Xcomp -XX:-TieredCompiltion
>>>                                 4) -Xcomp -XX:+TieredCompilation
>>>
>>> Thanks to Coleen for helping fixed constant pool index and cleaned
>>> LinkInfo.
>>> ---------------------------------------------------------------------------------------------------------------------------------- 
>>>
>>>
>>>
>>> Second revision attached.
>>>
>>>
>>>
>>>
>>> Thanks
>>> Yumin
>



More information about the hotspot-runtime-dev mailing list